0

Using scrapy I can resize an image and keep its aspect ratio. http://doc.scrapy.org/en/latest/topics/images.html#std:setting-IMAGES_THUMBS

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

what I want is only re sizing the image width and keeping the image height as it is. does anyone know how to do this ?

NOTE: I'm using scrapy to upload the images to amazon s3, so I don't have the option of resizing them locally.

4

1 に答える 1

0

独自のImages パイプラインを作成できます。このitem_completed方法では、ダウンロードしたすべての画像を開き、PILを使用してサイズを変更できます。Scrapy は、そのイメージング パイプラインに既に PIL を使用しています。

以下は暫定的な例です。(スクレイピーは使っていません。)

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 行目以下で、これら 2 つのメソッドのデフォルトの実装を読むことができます。

于 2013-05-09T15:20:53.620 に答える