私はScrapyを使っていくつかの画像をクロールします。画像は一部を切り取るか、ウォーターマークを追加する必要があります。 convert_image
をpipelines.py
に上書きしても機能しませんでした。コードは次のようになります。治療法convert_image
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield Request(image_url)
def convert_image(self, image, size=None):
if image.format == 'PNG' and image.mode == 'RGBA':
background = Image.new('RGBA', image.size, (255, 255, 255))
background.paste(image, image)
image = background.convert('RGB')
elif image.mode != 'RGB':
image = image.convert('RGB')
if size:
image = image.copy()
image.thumbnail(size, Image.ANTIALIAS)
else:
# cut water image TODO use defined image replace Not cut
x,y = image.size
if(y>120):
image = image.crop((0,0,x,y-25))
buf = StringIO()
try:
image.save(buf, 'JPEG')
except Exception, ex:
raise ImageException("Cannot process image. Error: %s" % ex)
return image, buf
アイデアはありますか?
UPDATE:
@warwaruk
あなたはそれが機能しなかったことを決めましたか?任意の例外または何ですか? <例外が書き換え機能のためにこのコードを使用しない.Iはそれが良い作品item_completed.and、ここでのコードは次のとおりです。
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
if item['refer'] == 'someurl.com' :
for a in image_paths:
o_img = os.path.join(self.store.basedir,a)
if os.path.isfile(o_img):
image = Image.open(o_img)
x,y = image.size
if(y>120):
image = image.crop((0,0,x,y-35))
image.save(o_img,'JPEG');
return item
あなたのパイプラインはまったく呼ばれていますか?設定で有効にしましたか? – warvariuc
はい、確かです。画像がダウンロードされました。 – kongkong
>私はpipelines.pyの関数convert_imagを上書きします。しかし、うまくいきませんでした。あなたはそれがうまくいかないと決めたのですか?任意の例外または何ですか? – warvariuc