Когда я пытаюсь создать файл gif, файл был успешно создан, но он имеет пикселизацию. Так что, если кто-нибудь может помочь мне с тем, как увеличить разрешение.
.Вот код: -
import PIL
from PIL import Image
import NumPy as np
image_frames = []
days = np.arange(0, 12)
for i in days:
new_frame = PIL.Image.open(
r"C:\Users\Harsh Kotecha\PycharmProjects\pythonProject1\totalprecipplot" + "//" + str(i) + ".jpg"
)
image_frames.append(new_frame)
image_frames[0].save(
"precipitation.gif",
format = "GIF",
append_images=image_frames[1:],
save_all = "true",
duration=800,
loop=0,
quality=100,
)
Вот файл GIF: -
Вот оригинальные изображения: -
Не могли бы вы поделиться парой кадров оригинальных изображений, пожалуйста?
Я отредактировал сообщение Марк, пожалуйста, взгляните на него.
Большое спасибо за предоставленный код, но есть одна вещь, которую я хочу спросить о строке f, как мне открыть файл, у которого есть путь.
И еще одно, что я хотел спросить, где вы всему этому научились, потому что я новичок.
Обновленный ответ
Теперь, когда вы предоставили несколько изображений, я попытался отключить сглаживание:
#!/usr/bin/env python3
from PIL import Image
# User editable values
method = Image.FASTOCTREE
colors = 250
# Load images precip-01.jpg through precip-12.jpg, quantize to common palette
imgs = []
for i in range(1,12):
filename = f'precip-{i:02d}.jpg'
print(f'Loading: {filename}')
try:
im = Image.open(filename)
pImage = im.quantize(colors=colors, method=method, dither=0)
imgs.append(pImage)
except:
print(f'ERROR: Unable to open {filename}')
imgs[0].save(
"precipitation.gif",
format = "GIF",
append_images=imgs[1:],
save_all = "true",
duration=800,
loop=0
)
Оригинальный ответ
Ваши исходные изображения — это файлы JPEG, что означает, что они, вероятно, имеют много тысяч цветов 2. Когда вы создаете анимированный GIF (или даже статический GIF), каждый кадр может иметь только 256 цветов в своей палитре.
Это может создать несколько проблем:
каждый кадр получает новую, отдельную палитру, хранящуюся вместе с ним, тем самым увеличивая размер GIF (каждая палитра составляет 0,75 КБ)
цвета сглаживаются, чтобы изображение выглядело как можно ближе к исходным цветам.
разные цвета могут быть выбраны для почти идентичных кадров, что означает, что цвета мерцают между различными оттенками в последовательных кадрах - может вызвать "мерцающий", как звезды
Если вы хотите узнать о GIF-файлах, вы можете узнать в 3872 раза больше, чем я когда-либо узнаю, прочитав отличные заметки Энтони Тиссена здесь, здесь и здесь.
Ваше изображение страдает от первой проблемы, потому что оно имеет 12 локальных таблиц цветов "за кадр", а также глобальную таблицу цветов3. Он также страдает от второй проблемы — дизеринга.
Чтобы избежать сглаживания, вы, вероятно, захотите сделать некоторые из следующих действий:
загрузите все изображения и добавьте их все вместе в изображение монстра 12x1 и найдите лучшую палитру для всех цветов. Поскольку все ваши изображения очень похожи, я думаю, что вам сойдет с рук создание палитры только из первого изображения без необходимости монтажа всех 12 - это будет быстрее.
теперь настройте палитру для каждого изображения с отключенным дизерингом и с использованием единой общей палитры.
сохраните анимированную последовательность изображений в виде поддонов, вставив единую общую палитру из первого шага выше
2: Вы можете подсчитать количество цветов в изображении с помощью ImageMagick, используя:
magick YOURIMAGE -format %k info:
3: Вы можете увидеть таблицы цветов в GIF с помощью gifsicle
, используя:
gifsicle -I YOURIMAGE.GIF
Большое спасибо, Марк, за такое подробное объяснение.
@HarshKotecha Я добавил немного кода, чтобы дать вам представление о том, как я к этому подхожу.
Что вы имеете в виду под "это пикселизация"? Разрешение кажется хорошим, но есть артефакты дизеринга; GIF-файлы ограничены 256 цветами на кадр, а в ваших исходных данных их больше.