2015-12-23 4 views
0

Я использую reportlab для создания PDF-документов из API-интерфейса python. Документы включают фотографии (ранее сделанных с помощью камеры или мобильного устройства), нагруженные:ReportLab отображает изображения с неправильной ориентацией

from reportlab.platypus import Image 
img = Image(path) 
story.append(img) 

Проблема: некоторые изображения не отображаются с правой ориентации (некоторые EXIF-данные, вероятно, утрачены или игнорируются в какой-то момент).

я столкнулся с подобной проблемой PIL один раз, и решение, которое я выбрал, чтобы использовать Жезл вместо PIL или подушки, но это, кажется ReportLab использует только PIL для обработки изображений с Python ...

Я нашел this code snippet from another question но я не уверен, как редактировать reportlab, чтобы включить его, или если это хороший способ.

Я удивлен, что я не нашел ничего по этому вопросу, я не могу быть только один хочет включить фотографии в ReportLab сгенерированных PDF ...

Вот изображение с оригиналом изображение открыто в режиме предварительного просмотра на левой и PDF справа: 1

Спасибо за любую помощь, я изо всех сил с этим в течение нескольких часов теперь ...

+0

Можете ли вы представить фактическую картину, которая иллюстрирует это поведение? –

+0

@MichielOvertoom Я отредактировал мое сообщение, чтобы добавить картинку. – Kyrill

+0

Это скриншот того, как изображение выглядит в Preview. Мне любопытно сама картина, поэтому я могу проверить ее содержимое. –

ответ

0

я на самом деле была такая же проблема с pyCairo ,

У меня есть куча изображений JPEG, некоторые из них непосредственно помещаются в документ PDF, а некоторые другие обрабатываются с помощью pyCairo перед вставкой в ​​PDF.

При вставке изображения JPEG в документ PDF отчета или при преобразовании изображения из JPEG в PNG для работы с pyCairo (pyCairo не работает с JPEG, насколько мне известно), ориентация изображения, сохраненного в EXIF теряется.

Вот что я в конечном итоге делает:

from reportlab.platypus import Image 
from wand.image import Image as WandImage 

def AddAPictureToDocument(): 

    with WandImage(filename=path) as wimg: 
      WandConvertToPNG(wimg,pngDestinationPath) 

    img = Image(pngDestinationPath) 
    story.append(img) 

def WandConvertToPNG(img, savepath): 

    exif = {} 
    exif.update((k[5:], v) for k, v in img.metadata.items() 
       if k.startswith('exif:')) 

    orientation = exif['Orientation'] 

    with img.convert('png') as converted: 
     if int(orientation) == 3 : 
      converted.rotate(180) 
     elif int(orientation) == 6 : 
      converted.rotate(90) 
     elif int(orientation) == 8 : 
      converted.rotate(270) 

    converted.save(filename=savepath) 

Но это может быть довольно медленным, особенно с pyCairo, так как мне нужно:

1) Преобразование из JPEG в PNG,

2) Поверните изображение в нужную сторону

3) Используйте pyCairo, чтобы нарисовать объекты на изображении

4) Сохраните pyCairo манипулируют изображение в формате PNG

5) Преобразование в PNG в JPEG для сжатия изображения

Было ли наивным меня предположить, что изображение librairies, такие как PIL или Wand бы справиться с ориентация изображения после преобразования JPEG-> PNG?

В любом случае, я все еще ищу лучшее решение.

Смежные вопросы