PHP - How to Merge Gif Animate
Posted in PHP and tagged with gif decode, gif encode, merge gif, PHP, split gif on 10/02/2008 01:54 am by adminหลายวันก่อนมีน้องมาปรึกษาเรื่อง 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
















