jQueryTips by Tee++;

  • Home
  • Videos
  • jQueryTips's Fans

Coding like playing a piano.

Subscribe RSS

Search

Search

Sponsored

jQueryTips on Social

Followers

hide
Chainnnn Pang25441 Dexteri@n Ton KanexKane Supachai JustDoIt Rut petchy Tophit anndrew Webmaster

Categories

hide
  • Programing
  • Database
  • Framework
  • Mobile Development
    • Titanium Mobile
    • PhoneGap
  • Life

Tag Cloud

hide
PHP JavaScript MySQL XML Mobile jQuery CodeIgniter Hash php xml Debug Library Zend API Events Plugins Facebook Basic Registration Tool Twitter Search Swath Performance ffmpeg YouTube Web Service Yahoo! NoSQL MongoDB PhoneGap

Recent Posts

hide
  • ใครๆ ก็มี Utils เอางี้เราเพิ่ม Utils ให้กับ CodeIgniter กันบ้าง
  • แนะนำ JS.Class (A JavaScript class library)
  • PHP กับ OOP มาปูพื้นฐานกันเสียใหม่ก่อน
  • ประกาศข่าวสารจาก Admin
  • JSFIDDLE สุดยอด Tools สำหรับการ Debug การเขียนตัวอย่างโคด
  • Titanium Mobile + HTML + Native Scrolling
  • HTML to PDF ตัวไหนดี วันนี้ผมมีคำตอบ ...
  • ทำความรู้จักกับ JavaScript Pattern ในเชิงลึก
  • ผมบอกคุณแล้ว .... คนโง่ก็ Code ได้
  • วันนี้ มาออกแบบ Web Service ด้วย PHP กันเถอะ (CodeIgniter Version)

Recent Comments

hide
  • เยดดดด
  • มีตัวอย่าง CI แบบ เพียว ๆ ไหมครับ
  • ขอบคุณมากครับ เห็นแนวทางได้ชัดขึ้นจากตอนแรก ที่งงไปหมด ไม่รู้อะไรเป็นอะไร
  • ขอบคุณมากเลยครับท่าน....แหม่เพิ่มกำลังใจให้ผมได้เยอะเลย ตอนนี้กำลังฝึกงานอยู่ที่แห่งนึงในหาดใหญ่ พร้อมเด็กจากอีกสถาบันนึง 3 คน เราคิดว่าเรา…
  • Very good blog, I really like ~

Links

hide
  • OSCOOL
  • Architeture & Performance
  • Video and TV
  • Appcelerator
  • PhoneGap
  • Home
  •  » Blogs

ImaGick สุดยอด Extension ทำงานเกี่ยวกับภาพ

Nov 21, 2008 11:42:32 PM | 2 Comments | in Programing | PHP
เอาล่ะ ขยันอัพบล๊อกเลย วันนี้ เขียนมันติดๆ กันเอาให้คุ้มๆ ขอ ชะแว๊บ มาในส่วนของ PHP สักเรื่องนะครับ หลายๆ คนคงรู้จัก Imagemagick มาก่อน นั่นก็คือชุด การทำงานที่เกี่ยวกับ Image ที่ครบเครื่องอย่างแรง ตัวนึง ซึ่งมีคนใช้กันทั่วโลก แต่ทว่า....

ที่ผมจะมาแนะนำวันนี้มันไม่ใช่ ImageMagick ครับ แต่มันคือ Imagick ซึ่งเป็น extension แกะกล่องของ PHP (หา Docs ยากฉิบ -*-) ที่แม้แต่ใน php.net ยังหา Docs มันได้ไม่สมบูรณ์ (แม้แต่น้อย เรียกว่า มันโชว์แค่ชื่อ function เลยจะดีกว่า)

โดยที่ข้อดีของมันต่างกับ imagemagik ยังไง

1. เป็น extension ตัวนึงของ PHP ที่ทำงานในลักษณะ OOP (ลักษณะเดียวกับพวก Soap, lop, DOM, etc.) ทำให้ใช้งานง่าย นึกภาพการใช้งาน library ตัวนึง ที่เราไม้ต้องรู้ว่า มันมีการทำงานยังไง รู้แค่ว่าจะเอา method อะไรมาใช้งาน

2. มีคนทำการ Benchmark มาแล้วว่าความเร็วระหว่าง ImageMagick กับ Imagick นั้นมันคนละเรื่อง เนื่องจาก มันไม่ต้องทำงานผ่านคำสั่ง exec อีกต่อไป

แต่ข้อเสียมันก็หนักหนาไม่ใช่เล่น
1. เนื่องจากมันยังใหม่อยู่มากๆ Search หาใน Google ข้อมูลที่จะเอามาใช้งานได้แทบจะไม่มี ต้องงมกันเอาเอง

2. แค่ข้อแรก มันก็หนักพอแล้ว อย่ามีข้อ 2 เลยดีกว่า

แต่ทั้งนี้ทั้งนั้น อย่าใให้ความยากลำบากมาเป็น อุปสรรคในการใช้งานของดีๆ กันเลย มามั่วๆ กันเอาเองดีกว่า อิอิ

ซึ่งการใช้งานบางตัวมันก็ไม่ได้ยากอะไรมาก เช่นการทำ Resize รูป อิอิ เอาของง่ายที่สุดก่อน
<?php
$im = new Imagick(‘images/original.jpg’);
$im->thumbnailImage(200, null);
$im->borderImage(‘red’, 5, 5);
?>

เท่านี้แหละ ก็จะได้ภาพ Resize ขนาด 200x200 ที่มี border 5 รอบด้าน เขียนง่ายดีมั้ยครับ

แต่ I นี่มันแค่ของอนุบาลสำหรับความสามารถมันน่ะครับ ลองมาดูตัวอย่างซึ่ง GD ปกติ ทำไม่ได้กันดีกว่า
<?php
$logo = new Imagick("images/logo.gif");
$logo->paintTransparentImage("#025AA4",0,0);
$logo_width = $logo->getImageWidth();
$logo_height = $logo->getImageHeight();
 
$im = new Imagick("tiled/tiled7.gif");
$new_im = new Imagick();
$new_im->setFormat("gif");
 
foreach ($im as $image) {
   $tmp =new Imagick();
   $tmp->newImage( $logo_width, $logo_height, "transparent", "gif" );
   $new_im->addImage( $tmp->textureImage( $image ) );
   $new_im->compositeImage( $logo, Imagick::COMPOSITE_OVER, 0, 0 );
}
 
header( "Content-Type: image/gif" );
echo $new_im->getImagesBlob();
?>

จากตัวอย่างนี้มันคือการสร้าง Glitter ใส่ตำแหน่งของภาพที่เราต้องการนั่นเอง ลองนึกภาพ ตามผมนะครับ

สมมุติ ภาพนึงมี สีในภาพเยอะแยะไปหมด แต่เราต้องการให้สี นึงมันเปลี่ยนเป็นลาย wink wink (gif animation)

1. ขั้นแรกที่เราต้องทำก็คือการนำ image เข้ามา
2. ต่อจากนั้นเรามา mark ตำแหน่งสีที่จะเปลี่ยนเป็น wink wink โดยทำให้มันเป็น Transparent ซะ
3. หาขนาดความกว้าง ความสูง เพื่อที่เราจะสร้าง ลาย wink wink ที่มีขนาด เต็มตามต้นฉบับ
** Wink Wink ต้องอยู่ในลักษณะของ Pattern
4. ทำการเรียกลาย Glitter
5. set format ให้ว่าจะทำเป็น gif
6. แตก Frame ของ Gif ออกมาด้วย Loop foreach
7. สร้างพื้นที่ที่จะวางลาย ขึ้นมาโดยปูพื้น เท่ากับ กว้าง สูง ของภาพเดิมที่หามาได้
8. textureImage คือการปูเป็นลักษณะของ Pattern ให้เต็ม
9. สุดท้ายเอาภาพเก่าที่ทำ Transparent ไว้แล้วมาวางทับ

เท่านี้ลายมันก็จะออกมาเรียบร้อย เพราะว่าเราสั่ง COMPOSITE_OVER คือให้ภาพเก่ามาทับไอ้ลาย Gif นี่ เท่านี้เราก็จะได้ Glitter แล้ว

เหนื่อยแฮะ เอาเป็นว่าถ้าใครสรใจอยากจะลองเล่นไอ้เจ้า Imagick นี่ก็ศึกษาดูคำสั่งมันได้ที่
http://www.php.net/manual/en/book.imagick.php

แต่ว่าต้องเอามาลองเองให้รู้ว่าอะไร มันเป็นอะไรครับ เพราะส่วนใหญ่มันจะไม่มีตัวอย่าง ลาล่ะครับ

twitter stumbleupon delicious digg facebook

2 comments

Add comment Load previous All comments

Leave a comment

Post Comment

Powered by OSCOOL. You may view this on RSS or ATOM.

OSCOOL

  • Twitter
  • Facebook
  • Next