scrapy convert_image - PullRequest
       11

scrapy convert_image

2 голосов
/ 09 марта 2012

Я использую Scrapy, чтобы сканировать некоторые изображения, изображения должны вырезать часть или добавить водяной знак. Я перезаписал функцию convert_image в pipelines.py, но она не сработала. Код выглядит так:

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

как вы решили, что это не сработало? какое-то исключение или что? <без исключения. Я использую этот код для перезаписи функции item_completed. И он работает хорошо, вот код: </p>

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

1 Ответ

4 голосов
/ 17 апреля 2012

ImagePipleline конвертирует изображения в JPEG (режим RGB) автоматически, и «переключателя» не существует.Хотя вы можете изменить его значение, он может испортить другую логику.Так что лучше использовать MediaPipeline - просто скачайте файлы.Вы можете написать другое приложение для последующей обработки файлов изображений.Это сделает вашу логику ясной и сделает скрап быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...