答案 1
APNG图像被设计为“伪装”为PNG,供不支持它们的读者使用。也就是说,如果读者不支持它们,它将只假设它是一个普通的PNG文件,只显示第一帧。这意味着它们具有与PNG(image / png)相同的MIME类型,它们具有相同的幻数(),并且通常它们使用相同的扩展名保存(尽管这不是检查文件类型的好方法)。89 50 4e 47 0d 0a 1a 0a
那么,您如何区分它们呢?APNG中有一个“acTL”块。因此,如果您搜索字符串(或者在十六进制中(块标记(即)之前的4个字节是大字节序格式的块的大小,而不计算字段末尾的大小,标记或CRC32)),您应该相当不错。为了做得更好,请检查此块是否出现在“IDAT”块的第一次出现之前(只需查找)。acTL
61 63 54 4C
00 00 00 08
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;
}
?>
答案 2
AFAIK,不支持APNG的库将只采用PNG的第一帧。在您的情况下,您可以从APNG(或PNG,JPEG等)创建新图像,然后将其重新另存为PNG。如果使用 GD,它应该剥离动画数据,除非库已更新为支持 APNG。
推荐
-
相当于Java中PHP的crypt函数 我正在将我的PHP代码迁移到Google App Engine - Java。因此,我需要一个相当于Java中PHP的crypt函数,因为我已将使用crypt的注册用户的所有密码存储在我的数据库中。 编辑1:这是我用于加密密码的php
-
需要有关如何从接受语言请求标头获取首选语言的示例 我需要一个代码示例或库来解析标头并返回我的首选语言。 指出: “接受语言请求标头”字段类似于“接受”,但限制首选作为请求响应的自然语言集。语言标记在第 3.10 节中定义。
-
无法在 Java 和 PHP 之间交换使用 AES-256 加密的数据 我的问题是:我在Java中加密的东西,我可以在Java中完全解密,但PHP不能解密。我用加密的内容可以使用 解密,但不能在 Java 中解密。 我想从Java应用程序发送和接收加密数据到PHP页面,所以我
-
-
Quercus是Java环境中PHP的可行替代品吗? 对于任何偶然发现这个问题的人,他们不知道是什么 - 它是用Java完成的PHP的实现。 对于我目前正在从事的项目,我们通过cgi在servlet上提供php页面(我知道它很笨拙,但这是支持遗留代码的要求
标签