почему мои файлы .tiff не преобразуются и не сохраняются в формате .jpeg

#python #tiff

Вопрос:

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

 #!/usr/bin/env python3
import os
import sys
from PIL import Image

cwd = os.getcwd()
path = cwd   '/supplier-data/images/'


for files in os.listdir(path):
        print(files)
        if not files.startswith('.') and not files.startswith('README')and not files.startswith('LICENSE'):
            with Image.open(path   files) as im:
                im=im.convert('RGB').resize((600, 400))
                im=im.save(path   files, 'jpeg', quality=100)
                print(im)

 

Комментарии:

1. None это совершенно нормальное возвращаемое значение для операций, которым не нужно ничего возвращать. Если save() не задокументировано, что что-то возвращается (и я не понимаю, почему это должно быть), эта печать, возвращающая ничего, предположительно ведет себя так, как ожидалось.

2. Глупый вопрос: Вы пробовали изменить имя файла, чтобы оно имело новое расширение, прежде чем сказать PIL сохранить его в этот файл?

3. Почему вы переназначаетесь im после каждой операции (т. е. im = im.foo(...) )? Это приведет к уничтожению ссылки на ваш Image объект.

4. чарльз — я думал, что при печати im подтвердит, что новый файл был преобразован, и даст мне подтверждение при запуске программы. Сценарий, который я использую, был взят из предыдущего упражнения, которое мы выполняли при преобразовании из tiff в jpeg, так как нам нужно изменить размер и формат

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

Ответ №1:

таким образом, мой сценарий действительно работал, но он преобразовал файлы и заменил их файлом с тем же именем, заканчивающимся на .tiff, хотя они были преобразованы в jpeg. я исправил сценарий с предложениями других здесь и сейчас, выполняет преобразования и сохраняет под тем же именем, но я добавил «.jpeg» в .save (), поэтому вместо замены старого файла он создал 2-е изображение файла и сохраняет в том же каталоге, как указано в первой части окончательного проекта. я больше не перезаписываю im и не использую im2 и im3 в сценарии. Я также использовал bash для проверки исходного и нового файла изображения.

вот пример того, как я сделал это в bash, используя исходное изображение, которое, как я предполагал, было файлом tiff:

 file -s 001
 

это то, что отображается:

001: Данные изображения в формате TIFF, малый размер, direntri = 11, высота=192, бит / с=8, сжатие=отсутствует, фотометрическая интерпретация=ноль, ширина=192

а вот и обновленная версия скрипта:

 #!/usr/bin/env python3
import os
import sys
from PIL import Image

cwd = os.getcwd()
path = cwd   '/supplier-data/images/'

for files in os.listdir(path):
        print(files)
        if not files.startswith('.') and not files.startswith('README')and not files.startswith('LICENSE'):
            with Image.open(path   files) as im:
                im2=im.convert('RGB').resize((600, 400))
                im3=im2.save(path   files   ".jpg", 'jpeg', quality=100)