激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 完美實現GIF動畫縮略圖的php代碼

完美實現GIF動畫縮略圖的php代碼

2019-11-14 15:12PHP代碼網 PHP教程

縮略圖是個很常用的功能。它的實現并不復雜,但如果原圖是GIF動畫的話,問題就會變得繁瑣一點。

下面通過一個取自CS警匪游戲的GIF動畫來說明問題:

完美實現GIF動畫縮略圖的php代碼

GIF動畫圖片:old.gif

為了讓問題更加清晰,我們先還原動畫各幀:

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

復制代碼代碼如下:


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

?> 


選擇二:用ImageMagick提供的convert命令: 

復制代碼代碼如下:


shell> convert old.gif old_%d.gif 

 

 

結果得到GIF動畫各幀示意圖如下所示:

完美實現GIF動畫縮略圖的php代碼

GIF動畫各幀示意圖

可以明顯的看到,GIF動畫為了壓縮,會以第一幀為模板,其余各幀按照適當的偏移量依次累加,并只保留不同的像素,結果是導致各幀尺寸不盡相同,為縮略圖造成障礙。

下面看看如何用PHP中的Imagick模塊來完美實現GIF動畫縮略圖:

復制代碼代碼如下:


<?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); 
?> 

 

 

代碼里最關鍵的是coalesceimages方法,它確保各幀尺寸一致,用手冊里的話來說就是:

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.

同時要注意optimizeImageLayers方法,它刪除重復像素內容,用手冊里的話來說就是:

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:如果要求更完美一點,可以使用quantizeImages方法進一步壓縮。

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

如果你更習慣操作shell的話,那么可以這樣實現GIF動畫縮略圖:

復制代碼代碼如下:


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

 

 

生成的new.gif如下:

 

完美實現GIF動畫縮略圖的php代碼

new.gif

有個細節問題:convert版本會比php版本小一些,這是API實現不一致所致。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜视频大全 | 麻豆视频在线播放 | 久久久久久久久成人 | 国产精品99久久99久久久二 | 8x成人在线电影 | 毛片a区| 91成人免费版 | av在线免费观看播放 | 羞羞的小视频 | 国产美女爽到喷白浆的 | 女人久久久www免费人成看片 | 久久久国产精品免费观看 | 午夜视频福利 | 最新中文字幕在线 | 91网视频在线观看 | chinese军人gay呻吟 | 中国黄色一级生活片 | 国产精品区一区二区三区 | 线观看免费完整aaa 一二区成人影院电影网 | 亚洲最黄视频 | 欧美 日韩 亚洲 中文 | 久久精品视频首页 | 国产一级aaa全黄毛片 | 日韩精品中文字幕一区二区 | 欧美一区二区三区四区五区动图 | 久久久久久中文字幕 | 日韩字幕在线 | 毛片视频在线免费观看 | 操毛片 | 日韩黄在线 | 99亚洲伊人久久精品影院红桃 | 最新se94se在线欧美 | 7777在线视频免费播放 | 日日草日日干 | 久久国产免费视频 | 国产一区影院 | 亚洲最新无码中文字幕久久 | 本站只有精品 | 高清国产午夜精品久久久久久 | 日韩1区| 羞羞答答www网站进入 |