最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

完美實(shí)現(xiàn)GIF動(dòng)畫縮略圖的php代碼

 更新時(shí)間:2011年01月02日 00:08:14   作者:  
縮略圖是個(gè)很常用的功能。它的實(shí)現(xiàn)并不復(fù)雜,但如果原圖是GIF動(dòng)畫的話,問(wèn)題就會(huì)變得繁瑣一點(diǎn)。
下面通過(guò)一個(gè)取自CS警匪游戲的GIF動(dòng)畫來(lái)說(shuō)明問(wèn)題:
GIF動(dòng)畫圖片:old.gif

GIF動(dòng)畫圖片:old.gif

為了讓問(wèn)題更加清晰,我們先還原動(dòng)畫各幀:

選擇一:用PHP中的Imagick模塊:

復(fù)制代碼 代碼如下:

<?php
$image = new Imagick('old.gif');
$i = 0;
foreach ($image as $frame) {
$frame->writeImage('old_' . $i++ . '.gif');
}
?>

選擇二:用ImageMagick提供的convert命令:
復(fù)制代碼 代碼如下:

shell> convert old.gif old_%d.gif

結(jié)果得到GIF動(dòng)畫各幀示意圖如下所示:

GIF動(dòng)畫各幀示意圖

GIF動(dòng)畫各幀示意圖

可以明顯的看到,GIF動(dòng)畫為了壓縮,會(huì)以第一幀為模板,其余各幀按照適當(dāng)?shù)钠屏恳来卫奂?,并只保留不同的像素,結(jié)果是導(dǎo)致各幀尺寸不盡相同,為縮略圖造成障礙。

下面看看如何用PHP中的Imagick模塊來(lái)完美實(shí)現(xiàn)GIF動(dòng)畫縮略圖:

復(fù)制代碼 代碼如下:

<?php
$image = new Imagick('old.gif');
$image = $image->coalesceImages();
foreach ($image as $frame) {
$frame->thumbnailImage(50, 50);
}
$image = $image->optimizeImageLayers();
$image->writeImages('new.gif', true);
?>

代碼里最關(guān)鍵的是coalesceimages方法,它確保各幀尺寸一致,用手冊(cè)里的話來(lái)說(shuō)就是:

Composites a set of images while respecting any page offsets and disposal methods. GIF, MIFF, and MNG animation sequences typically start with an image background and each subsequent image varies in size and offset. Returns a new Imagick object where each image in the sequence is the same size as the first and composited with the next image in the sequence.

同時(shí)要注意optimizeImageLayers方法,它刪除重復(fù)像素內(nèi)容,用手冊(cè)里的話來(lái)說(shuō)就是:

Compares each image the GIF disposed forms of the previous image in the sequence. From this it attempts to select the smallest cropped image to replace each frame, while preserving the results of the animation.

BTW:如果要求更完美一點(diǎn),可以使用quantizeImages方法進(jìn)一步壓縮。

注意:不管是coalesceimages,還是optimizeImageLayers,都是返回新的Imagick對(duì)象!

如果你更習(xí)慣操作shell的話,那么可以這樣實(shí)現(xiàn)GIF動(dòng)畫縮略圖:

復(fù)制代碼 代碼如下:

shell> convert old.gif -coalesce -thumbnail 50x50 -layers optimize new.gif

生成的new.gif如下:

 

new.gif

new.gif

有個(gè)細(xì)節(jié)問(wèn)題:convert版本會(huì)比php版本小一些,這是API實(shí)現(xiàn)不一致所致。

另外,如果縮略圖尺寸不符合原圖比例,為了避免變形,還要考慮裁剪或者是補(bǔ)白,由于本文主要討論GIF動(dòng)畫縮略圖的特殊性,就不再繼續(xù)討論這些問(wèn)題了,有興趣的自己搞定吧。

相關(guān)文章

  • php下獲取http狀態(tài)的實(shí)現(xiàn)代碼

    php下獲取http狀態(tài)的實(shí)現(xiàn)代碼

    在項(xiàng)目開(kāi)發(fā)中,有時(shí)我們需要知道遠(yuǎn)程的URL地址是否能訪問(wèn)正常,判斷其正常與否后進(jìn)行下一步的操作,那么在PHP中如何獲取遠(yuǎn)程HTTP的狀態(tài)呢
    2014-05-05
  • Yii PHP Framework實(shí)用入門教程(詳細(xì)介紹)

    Yii PHP Framework實(shí)用入門教程(詳細(xì)介紹)

    本篇文章是對(duì)Yii PHP Framework實(shí)用入門教程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • linux平臺(tái)編譯安裝PHP7并安裝Redis擴(kuò)展與Swoole擴(kuò)展實(shí)例教程

    linux平臺(tái)編譯安裝PHP7并安裝Redis擴(kuò)展與Swoole擴(kuò)展實(shí)例教程

    這篇文章主要介紹了linux平臺(tái)編譯安裝PHP7并安裝Redis擴(kuò)展與Swoole擴(kuò)展的方法,結(jié)合實(shí)例形式詳細(xì)分析了Linux平臺(tái)上安裝php7并安裝Redis擴(kuò)展與Swoole擴(kuò)展的具體步驟與操作技巧,需要的朋友可以參考下
    2016-09-09
  • PHP弱類型的安全問(wèn)題詳細(xì)總結(jié)

    PHP弱類型的安全問(wèn)題詳細(xì)總結(jié)

    弱類型語(yǔ)言也稱為弱類型定義語(yǔ)言。與強(qiáng)類型定義相反。像vb,php等就屬于弱類型語(yǔ)言,這篇文章給大家詳細(xì)介紹關(guān)于PHP弱類型的安全問(wèn)題,有需要的可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • php中郵箱地址正則表達(dá)式實(shí)現(xiàn)與詳解

    php中郵箱地址正則表達(dá)式實(shí)現(xiàn)與詳解

    本文章不但要講述了關(guān)于正則達(dá)式而且還講述了關(guān)于郵箱正則的構(gòu)成用法詳解,有需要了解的朋友可以參考一下,同時(shí)我們也提供了多種不同的郵箱驗(yàn)證實(shí)例
    2012-04-04
  • php實(shí)現(xiàn)excel中rank函數(shù)功能的方法

    php實(shí)現(xiàn)excel中rank函數(shù)功能的方法

    這篇文章主要介紹了php實(shí)現(xiàn)excel中rank函數(shù)功能的方法,較為詳細(xì)的分析了rank函數(shù)的功能及具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-01-01
  • php實(shí)現(xiàn)session自定義會(huì)話處理器的方法

    php實(shí)現(xiàn)session自定義會(huì)話處理器的方法

    這篇文章主要介紹了php實(shí)現(xiàn)session自定義會(huì)話處理器的方法,可通過(guò)設(shè)置session.save_handler為user來(lái)調(diào)用自定義的回調(diào)函數(shù),從而實(shí)現(xiàn)session自定義會(huì)話處理器的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • PHP實(shí)現(xiàn)異步定時(shí)多任務(wù)消息推送

    PHP實(shí)現(xiàn)異步定時(shí)多任務(wù)消息推送

    在 PHP 中實(shí)現(xiàn)異步定時(shí)多任務(wù)消息推送的方式有多種,其中一種常用的方式是使用異步任務(wù)隊(duì)列,這篇文章主要介紹了這一方法的具體實(shí)現(xiàn),需要的可以參考一下
    2023-04-04
  • php IP及IP段進(jìn)行訪問(wèn)限制的代碼

    php IP及IP段進(jìn)行訪問(wèn)限制的代碼

    本來(lái)是寫了幾個(gè)函數(shù),IP黑名單是記到庫(kù)里的,為了方便理解,改成了一個(gè)class把IP黑名單寫了出來(lái)。
    2008-12-12
  • php利用jsonp實(shí)現(xiàn)跨域

    php利用jsonp實(shí)現(xiàn)跨域

    JSONP(JSON?with?Padding)是一種使用普通的<script>標(biāo)簽來(lái)發(fā)起跨域請(qǐng)求的方法,本文主要為大家詳細(xì)介紹了PHP如何利用jsonp實(shí)現(xiàn)跨域,需要的可以參考下
    2023-11-11

最新評(píng)論

镇雄县| 隆林| 崇左市| 沂源县| 永泰县| 正宁县| 神池县| 衡山县| 罗江县| 博客| 漯河市| 渭源县| 利辛县| 宁蒗| 左云县| 吉木萨尔县| 湟中县| 五台县| 云霄县| 定陶县| 嘉禾县| 仪征市| 黄山市| 军事| 富宁县| 桐乡市| 马鞍山市| 石台县| 遵化市| 高陵县| 桐乡市| 洛南县| 平原县| 尼木县| 景谷| 邯郸县| 淮阳县| 贡觉县| 军事| 集贤县| 瑞昌市|