2013-05-09 30 views
0

使用scrapy我可以調整圖像大小並保持其寬高比。 http://doc.scrapy.org/en/latest/topics/images.html#std:setting-IMAGES_THUMBS如何僅使用scrapy調整圖像寬度?

IMAGES_THUMBS = { 
    'small': (50, 50), 
    'big': (270, 270), 
} 

我要的是隻能重新大小的圖像寬度,保持圖像高度,因爲它是。 沒有人知道如何做到這一點?

注意:我使用scrapy將圖像上傳到亞馬遜s3,所以我沒有選擇在本地調整它們的大小。

回答

0

您可以創建自己的Images pipeline。在item_completed方法中,您可以打開所有下載的圖像並使用PIL調整它們的大小。 Scrapy已經爲其成像管線使用了PIL。

這裏是一個試驗性的例子。 (我不使用Scrapy。)

from scrapy.contrib.pipeline.images import ImagesPipeline 
from scrapy.exceptions import DropItem 
from scrapy.http import Request 

from PIL import Image 

class MyImagesPipeline(ImagesPipeline): 

    def get_media_requests(self, item, info): 
     for image_url in item['image_urls']: 
      yield Request(image_url) 

    def item_completed(self, results, item, info): 
     for result, image_info in results: 
      if result: 
       path = image_info['path'] 
       img = Image.open(path) 
       # here is where you do your resizing - this method overwrites the 
       # original image you will need to create a copy if you want to keep 
       # the original. 
       img = img.resize((100, 72)) 
       img.save(path) 
     return item 

你可以看到Scrapy確實在其默認圖像流水線:https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/pipeline/images.py#L283。在300行以下,您可以閱讀這兩種方法的默認實現。

+0

我正在使用scrapy將圖像上傳到amazon s3,所以我沒有選擇在本地調整它們的大小。 – Vanddel 2013-05-19 11:51:13

+0

圖像只是字節。您可以在將其發送到亞馬遜S3之前在內存中對其進行修改。 – 2013-05-19 12:30:16

相關問題