使用scrapy我可以调整图像大小并保持其宽高比。 http://doc.scrapy.org/en/latest/topics/images.html#std:setting-IMAGES_THUMBS
IMAGES_THUMBS = {
'small': (50, 50),
'big': (270, 270),
}
我想要的只是重新调整图像宽度并保持图像高度不变。 有谁知道怎么做?
注意:我使用scrapy将图像上传到亚马逊s3,因此我无法在本地调整大小。
答案 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行下面,您可以阅读这两种方法的默认实现。