nic*_*ico 15
对于不支持它们的读者,APNG图像被设计为"伪装"为PNG.也就是说,如果一个阅读器不支持它们,它只会假设它是一个普通的PNG文件而只显示第一帧.这意味着它们具有与PNG(image/png)相同的MIME类型,它们具有相同的幻数(89 50 4e 47 0d 0a 1a 0a
)并且通常它们以相同的扩展名保存(尽管这不是检查文件类型的好方法) ).
那么,你如何区分它们?APNG中有一个"acTL"块.所以,如果你搜索字符串acTL
(或者,十六进制,61 63 54 4C
(块标记之前的4个字节(即00 00 00 08
)是大端格式的块的大小,而不计算结尾处的大小,标记或CRC32)领域))你应该很好.为了更好地做到这一点,请检查此块在第一次出现"IDAT"块之前出现(只需查找IDAT
).
此代码(取自http://foone.org/apng/identify_apng.php)将起到作用:
<?php
# Identifies APNGs
# Written by Coda, functionified by Foone/Popcorn Mariachi#!9i78bPeIxI
# This code is in the public domain
# identify_apng returns:
# true if the file is an APNG
# false if it is any other sort of file (it is not checked for PNG validity)
# takes on argument, a filename.
function identify_apng($filename)
{
$img_bytes = file_get_contents($filename);
if ($img_bytes)
{
if(strpos(substr($img_bytes, 0, strpos($img_bytes, 'IDAT')),
'acTL')!==false)
{
return true;
}
}
return false;
}
?>
Run Code Online (Sandbox Code Playgroud)
AFAIK,不支持APNG的图书馆将只占用PNG的第一帧.在您的情况下,您可以从APNG(或PNG,JPEG等)创建新图像并将其重新保存为PNG.如果使用GD,它应该剥离动画数据,除非库已更新为支持APNG.
归档时间: |
|
查看次数: |
2188 次 |
最近记录: |