如何使用scrapy仅调整图像宽度?

时间:2013-05-09 14:45:39

标签: python python-imaging-library scrapy

使用scrapy我可以调整图像大小并保持其宽高比。 http://doc.scrapy.org/en/latest/topics/images.html#std:setting-IMAGES_THUMBS

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

我想要的只是重新调整图像宽度并保持图像高度不变。 有谁知道怎么做?

注意:我使用scrapy将图像上传到亚马逊s3,因此我无法在本地调整大小。

1 个答案:

答案 0 :(得分: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行下面,您可以阅读这两种方法的默认实现。