วิธีการแปลงแถบ PNG เป็น GIF?


12

ดังนั้นฉันสร้างแอนิเมชั่นนี้ในโปรแกรมอย่างไรก็ตามดูเหมือนจะไม่สนับสนุนการส่งออกเป็นลำดับ PNG ดังนั้นฉันจึงสามารถแปลงเป็น GIF ได้ ภาพเคลื่อนไหวมีมากกว่า 100 เฟรมดังนั้นการบันทึกแต่ละภาพทีละภาพจะใช้เวลานาน อย่างไรก็ตามมันรองรับการส่งออกเป็น "สตริป" ซึ่งเป็นเหมือนภาพยนตร์ภาพยนตร์ แต่ละภาพในภาพเคลื่อนไหวมีขนาดเท่ากัน นี่คือการทำงานของคุณสมบัติ "สตริป" ของโปรแกรม

ภาพในภาพเคลื่อนไหวจะถูกเรียงซ้อนในแนวนอนเฟรมแรกจะอยู่ทางซ้ายสุดในขณะที่เฟรมสุดท้ายอยู่ด้านขวาสุด ไม่มีช่องว่างระหว่างเฟรมและชื่อไฟล์มักจะเป็น "name_stripX.png" หากภาพเคลื่อนไหวมี X เฟรม หากแต่ละเฟรมคือ 32 คูณ 32 และภาพเคลื่อนไหวมี 8 เฟรมไฟล์นี้จะมีความกว้าง 256 และความสูง 32

นี่คือตัวอย่างผลลัพธ์บางสีเติมในหนึ่งเฟรม:

ตัวอย่างผลลัพธ์

นอกจากนี้เพื่อล้างสิ่งต่าง ๆ อีกเล็กน้อยโปรแกรมเรียกว่า "Game Maker 8.0"

คำตอบ:


16

คุณสามารถใช้ImageMagickเพื่อแปลงภาพในรูปแบบที่แตกต่างกันและควรจะทำได้อย่างง่ายดาย ก่อนอื่นคุณสามารถแบ่งออกเป็นส่วนต่าง ๆ ( original.pngเป็นภาพต้นฉบับและในกรณีนี้ขนาด 32x32 พิกเซล):

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

จากนั้นคุณสามารถแปลงเป็นภาพเคลื่อนไหวได้ (ใช้-loop 1หากคุณไม่ต้องการให้วนซ้ำ):

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

ที่เกิดขึ้นใน:

PNG เอาต์พุตของคำสั่งแรกมีออฟเซ็ตรวมอยู่ในดังนั้นจึงไม่มี-page +0+0ตัวเลือกภาพเคลื่อนไหวจะสิ้นสุดลงเช่น:

มีตัวเลือกอื่น ๆ ที่แตกต่างกันซึ่งคุณสามารถรวม (ส่วนใหญ่ในคำสั่งที่สอง) เช่น-delayฯลฯ - คุณยังสามารถปรับภาพเคลื่อนไหวให้เหมาะสมเพื่อให้มีขนาดเล็กลง (และเร็วกว่าในการโหลด / แสดงผล) - เช่นยืมจากที่นี่ :

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

หรือใช้ gifsicle

gifsicle -O output.gif -o optimised.gif

แก้ไข:หากเฟรมมีความโปร่งใสคุณสามารถตั้งค่าเฟรมที่จะแทนที่โดยการเพิ่ม
-dispose Backgroundตัวเลือกดังนั้นเมื่อมีการจำหน่ายเฟรมเมื่อโหลดเฟรมถัดไป:


ตัวอย่างด้านบนทำโดยไม่มีpageตัวเลือกเพื่อให้แสดงอย่างชัดเจน

ปัญหาเกี่ยวกับสิ่งนี้คือคุณอาจไม่สามารถปรับภาพผลลัพธ์ให้เหมาะสมที่สุดได้ - ดังนั้นวิธีอื่นอาจทำให้กรอบทึบแสงดังนั้นเฟรมถัดไปจะครอบคลุมเฟรมก่อนหน้า


ภาพมีความโปร่งใสและโดยทั่วไปมันเป็นแค่การวาดเฟรมถัดไปบนเฟรมก่อนหน้ามีวิธีใดบ้างที่ฉันสามารถทำได้
user245115

การลบความโปร่งใสออกจากอิมเมจต้นฉบับเป็นวิธีที่ง่ายที่สุด แต่สามารถทำได้ด้วยพารามิเตอร์มากขึ้น
david6

@ user245115 - แทนที่เฟรมแทนการวางซ้อน - ดูแก้ไข
วิลฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.