Làm cách nào để chuyển đổi dải PNG thành GIF?


12

Vì vậy, tôi đã tạo hoạt hình này trong một chương trình, tuy nhiên, nó dường như không hỗ trợ xuất dưới dạng chuỗi PNG để tôi có thể chuyển đổi nó thành GIF. Hoạt hình có hơn 100 khung hình, vì vậy việc lưu từng hình ảnh một sẽ mất nhiều thời gian. Tuy nhiên, nó hỗ trợ xuất dưới dạng "dải", giống như một bộ phim. Mỗi hình ảnh trong hình ảnh động có cùng kích thước. Đây là cách tính năng "dải" của chương trình hoạt động.

Các hình ảnh trong hình ảnh động được xếp chồng lên nhau theo chiều ngang, khung đầu tiên nằm ở bên trái trong khi khung cuối cùng ở bên phải. Không có khoảng cách giữa các khung và tên tệp thường là "name_stripX.png" nếu hình động có khung X. Nếu mỗi khung hình là 32 x 32 và hình động có 8 khung hình, tệp này sẽ có chiều rộng 256 và chiều cao là 32.

Dưới đây là một số ví dụ đầu ra, mỗi màu lấp đầy trong một khung:

Ví dụ đầu ra

Ngoài ra, chỉ cần làm rõ hơn một chút, chương trình có tên là "Game Maker 8.0".

Câu trả lời:


16

Bạn có thể sử dụng ImageMagick để chuyển đổi hình ảnh theo nhiều cách khác nhau và nó có thể thực hiện điều này khá dễ dàng. Trước tiên, bạn có thể chia thành các phần ( original.pnglà hình ảnh nguồn và trong trường hợp này là kích thước 32x32 pixel):

convert original.png -crop 32x32 parts-%02d.png

Sau đó, bạn có thể chuyển đổi nó thành một hình ảnh động (sử dụng -loop 1nếu bạn không muốn nó lặp lại):

convert -loop 0 -page +0+0 ./parts*.png output.gif

Kết quả là:

Các PNG đầu ra của lệnh đầu tiên có phần bù được bao gồm trong chúng, vì vậy không có -page +0+0tùy chọn hoạt hình kết thúc như sau:

Có nhiều tùy chọn khác nhau mà bạn có thể bao gồm (chủ yếu trong lệnh thứ hai), -delayv.v. - bạn cũng có thể tối ưu hóa hình ảnh động để nó nhỏ hơn (và nhanh hơn để tải / kết xuất) - ví dụ: mượn từ đây :

convert output.gif -fuzz 10% -layers Optimize optimised.gif

hoặc sử dụng gificle

gifsicle -O output.gif -o optimised.gif

EDIT: Nếu các khung trong suốt, bạn có thể đặt các khung để thay thế bằng cách thêm
-dispose Backgroundtùy chọn, vì vậy khi một khung được xử lý khi khung tiếp theo được tải:


Ví dụ trên được thực hiện mà không có pagetùy chọn để nó hiển thị rõ ràng

Vấn đề với điều này là có lẽ bạn không thể tối ưu hóa hình ảnh thu được sau đó - vì vậy một cách khác có thể là làm cho các khung hình mờ để khung hình tiếp theo che đi phần trước.


Hình ảnh có độ trong suốt và về cơ bản, nó chỉ vẽ khung hình tiếp theo so với khung hình trước, có cách nào tôi có thể làm cho nó để nó vẽ khung hình tiếp theo trên một khoảng trống không?
user245115

Loại bỏ độ trong suốt từ hình ảnh nguồn là phương pháp dễ nhất. Nhưng nó có thể được thực hiện với nhiều tham số hơn.
david6

@ user245115 - thay thế các khung thay vì lớp phủ - xem chỉnh sửa.
Wilf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.