Магия изображения с питоном на окнах, приводящая к CorruptImageError: невозможно прочитать данные изображения - PullRequest
0 голосов
/ 03 марта 2019

Привет. У меня возникли проблемы при попытке конвертировать PDF-файлы в формат .jpeg. Я запускаю python из дистрибутива anaconda на компьютере с Windows.

Ниже приведен код, который работает для некоторых файлов PDF

import os
from wand.image import Image as wi
pdf_dir = r"C:\\Users\Downloads\python computer vison\Computer-Vision-with-Python\pdf_to_convert"
os.chdir(pdf_dir)
path = r"C:/Users/Downloads/python computer vison/Computer-Vision-with-Python/jpeg_extract/"
for pdf_file in os.listdir(pdf_dir):
    print("filename is ",pdf_file)
    pdf = wi(filename=pdf_file,resolution=300)
    #print("filename is ",pdf_file)
    pdfImage = pdf.convert("jpeg")
    i = 1
    for img in pdfImage.sequence:
        page = wi(image=img)
        page.save(filename=path+pdf_file+str(i)+".jpg")
        i+=

и ниже - это вывод

filename is  tmpdocument-page0.pdf
filename is  tmpdocument-page1.pdf
filename is  tmpdocument-page100.pdf
filename is  tmpdocument-page1000.pdf
filename is  tmpdocument-page1001.pdf
filename is  tmpdocument-page1002.pdf
filename is  tmpdocument-page1003.pdf
filename is  tmpdocument-page1004.pdf
filename is  tmpdocument-page1005.pdf
filename is  tmpdocument-page1006.pdf
filename is  tmpdocument-page1007.pdf
filename is  tmpdocument-page1008.pdf
filename is  tmpdocument-page1009.pdf
filename is  tmpdocument-page1012.pdf
---------------------------------------------------------------------------
CorruptImageError                         Traceback (most recent call last)
<ipython-input-7-84715f25da7c> in <module>()
      8     #path = r"C://Users/Downloads/Work /ml_training_samples/tmp/"
      9     print("filename is ",pdf_file)
---> 10     pdf = wi(filename=pdf_file,resolution=300)
     11     #print("filename is ",pdf_file)
     12     pdfImage = pdf.convert("jpeg")

~\Anaconda3\envs\python-cvcourse\lib\site-packages\wand\image.py in __init__(self, image, blob, file, filename, format, width, height, depth, background, resolution, pseudo)
   4706                     self.read(blob=blob, resolution=resolution)
   4707                 elif filename is not None:
-> 4708                     self.read(filename=filename, resolution=resolution)
   4709                 # clear the wand format, otherwise any subsequent call to
   4710                 # MagickGetImageBlob will silently change the image to this

~\Anaconda3\envs\python-cvcourse\lib\site-packages\wand\image.py in read(self, file, filename, blob, resolution)
   5000             r = library.MagickReadImage(self.wand, filename)
   5001         if not r:
-> 5002             self.raise_exception()
   5003 
   5004     def save(self, file=None, filename=None):

~\Anaconda3\envs\python-cvcourse\lib\site-packages\wand\resource.py in raise_exception(self, stacklevel)
    220             warnings.warn(e, stacklevel=stacklevel + 1)
    221         elif isinstance(e, Exception):
--> 222             raise e
    223 
    224     def __enter__(self):

CorruptImageError: unable to read image data `C:/Users/AppData/Local/Temp/magick-40700dP2k-1ORw81R1' @ error/pnm.c/ReadPNMImage/1346

bach Ground, поэтому у меня есть документ PDF с изображением, названный tmpdocument, который содержит более 2200 страниц, поэтому я разделил их с помощью python на отдельные документы PDF. Теперь яя пытаюсь конвертировать их в JPEG.

проблема:

, поэтому, когда я пытаюсь конвертировать PDF-файлы в JPEG, некоторые страницы успешно, а некоторые страницы fa9.ils с указанной выше ошибкой, так какВсе эти страницы взяты из одного документа, я очень сомневаюсь, что это проблема формата.Также я могу открыть и просмотреть изображение в Adobe, поэтому я уверен, что страница не повреждена.

Наконец, Image magic занимает столько места на диске, а затем эта проблема, которую я действительно потерял, есть ли другой способдля достижения вышеупомянутого scenerio любые входные данные были бы полезны.

Спасибо.

Обновлено

Спасибо за ответ.Да, я использую ghostscript 9.26.PDF - это довольно важные данные, поэтому, к сожалению, я не могу публиковать их в Интернете.временная папка составляет 18 Мб, так что я думаю, что все в порядке.

Я нашел в сети какой-то код, который генерирует файлы jpeg, но заменяет их, а не создает новые файлы. Я никогда раньше не выполнял никаких подпроцессов, и в нем нет видимостиэтот код, если программа запущена или не выполнена, или как ее убить, любые входные данные также приветствуются.

Я понимаю, что она больше не использует магию изображения, но я в порядке, пока могу генерировать jpeg.

import os, subprocess

pdf_dir = r"C:\\Users\Downloads\latest_python\python computer vison\Computer-Vision-with-Python\pdf_to_convert"
os.chdir(pdf_dir)
pdftoppm_path = r"C:\Program Files\poppler-0.68.0_x86\poppler-0.68.0\bin\pdftoppm.exe"
i = 1
for pdf_file in os.listdir(pdf_dir):
    if pdf_file.endswith(".pdf"):
        subprocess.Popen('"%s" -jpeg %s out' % (pdftoppm_path, pdf_file))
        i+=1
...