PHP - How to Merge Gif Animate

หลายวันก่อนมีน้องมาปรึกษาเรื่อง script php กับการ merge ไฟล์รูป gif animate เข้าด้วยกัน
เลยเอามาเขียนลงใน blog ด้วยดีกว่าเผื่อมีใครจะติดปัญหาแบบเดียวกันอยู่

หลายคนคงเคยประสบปัญหาในการรวมรูป gif เข้าด้วยกัน
แล้วรูปกลับไม่ขยับดุ๊กดิ๊กเหมือนเดิม กลับกลายเป็นภาพนิ่งซะงั้น  (x_x)
วันนี้ผมจะมาไขข้อข้องใจให้ครับ

ทำความเข้าใจก่อนว่ารูป gif animate คืออะไร?
จริงๆ แล้วรูป gif animate ก็คือรูปหลายๆ Frame มาวางต่อกันแล้วรวมเข้าเป็นไฟล์เดียว
ทำให้รูปเกิดความเคลื่อนไหว พูดไปแล้วงงป่าวๆ ดูรูปตัวอย่างเลยดีกว่าครับ เช่นรูปนี้

—->


Frame 1              Frame 2               Frame 3

Frame 4                 Frame 5               Frame 6

Frame 7                Frame 8               Frame 9

Frame 10              Frame 11              Frame 12

Frame 13              Frame 14


รู้แล้วว่า gif animate คืออะไร แล้วยังไงต่อ?

ตอนนี้เรารู้แล้วว่า gif animate แบ่งเป็นหลายๆ frame เพราะฉะนั้นถ้าเราใช้พวกคำสั่ง
imagecopymerge ไปตรงๆ เลย php จะทำการรวมให้เราเฉพาะ frame แรกเท่านั้น
ทำให้ผลลัพธ์ที่ได้กลายเป็นภาพนิ่ง (-_-)

ดังนั้น ถ้าเราต้องการรวมรุป gif 2 รูปเข้าด้วยกัน เราต้องแยกรูปที่จะรวมทั้ง 2 รูปออกเป็น frame
ก่อนแล้วแยกเก็บใสโฟลเดอร์ไว้ ผมขอเรียกขั้นตอนนี้ว่าการ split ซึ่งเพื่อนๆ สามารถ download
script ได้ตามลิงก์นี้ครับ http://phpclasses.ca/browse/package/3234.html
** มี bug ในไฟล์ชื่อ decode_a_gif.php บรรทัดที่ 10 แก้โดยเปลี่ยนจาก
fwrite(fopen(($i < 10 ? “frames/0$i_frame.gif”:”frames/$i_frame.gif”), “wb”), $arr[$i]);
แก้เป็น
fwrite ( fopen ( ( $i < 10 ? “frames/0$i.gif” : “frames/$i.gif” ), “wb” ), $arr [ $i ] );
Split เสร็จแล้วทำไงต่อ?
เมื่อเรา split ได้รูปเป็นหลายๆ frame มา 2 ชุดแล้ว ให้เราทำการรวมรูป ใน frame ที่เราต้องการ
เช่น สมมุติว่ารูปแรกเราแยกมาเป็น 10 frame รูปที่ 2 แยกมาเป็น 2 frame ถ้าต้องการแทรกรูปที่ 2 ไปที่
frame ที่ 5 ของรูปที่ 1  ก็นำรูป frame ที่ 5  ของรูปที่ 1 ไปรวมกับ frame แรกของรูปที่ 2 เป็นต้น
ซึ่งคำสั่ง ในการรวมรูปในข้นตอนนี้ใช้  imagecopymerge ได้เลยครับ เพราะว่าเป็นการรวม
ภาพนิ่งธรรมดา อ่านดูแล้วอาจจะงงๆ  แนะนำให้ลองทำดูเลยดีกว่าครับ (*_*)

รวมรูปเสร็จแล้วก็มาถึงขั้นตอนสุดท้าย (^_^)V
เมื่อรวมรูปเป็น frameๆ เสร็จแล้ว สุดท้าย เราก็แค่ merge frame เหล่านั้นกลับมาเป็นรูป
gif animate เหมือนเดิมเท่านี้ก็เสร็จแล้วค้าบบพี่น้องงงง download script merge ได้ตาม
ลิงก์นี้เลยครับ  http://phpclasses.sgboards.com/browse/package/3163.html

หวังว่าข้อมูลจะเป็นประโยชน์กับเพื่อนๆ นะครับ
ใครติดปัญหาอะไร หรือมีวิธีอะไรแนะนำที่ดีกว่านี้ก็ Comment ไว้ได้เลยนะครับ
ขอบคุณมากครับ Y(=^=)Y

Leave a comment