如何将APNG分为PNG图像,并通过PHP转换为Animate GIF



我想通过imagemagickapng转换为gif,但我不知道该怎么做

我看到将APNG分开为php的PNG图像,我尝试了,但在我的图像中仍然没有工作我像
1.ezgif.com/apng-to-gif
2.Aconvert.com/image/apng-to-gif

<?php
function splitapng($data) {
  $parts = array();
  // Save the PNG signature   
  $signature = substr($data, 0, 8);
  $offset = 8;
  $size = strlen($data);
  while ($offset < $size) {
    // Read the chunk length
    $length = substr($data, $offset, 4);
    $offset += 4;
    // Read the chunk type
    $type = substr($data, $offset, 4);
    $offset += 4;
    // Unpack the length and read the chunk data including 4 byte CRC
    $ilength = unpack('Nlength', $length);
    $ilength = $ilength['length'];
    $chunk = substr($data, $offset, $ilength+4); 
    $offset += $ilength+4;
    if ($type == 'IHDR')
      $header = $length . $type . $chunk;  // save the header chunk
    else if ($type == 'IEND')
      $end = $length . $type . $chunk;     // save the end chunk
    else if ($type == 'IDAT') 
      $parts[] = $length . $type . $chunk; // save the first frame
    else if ($type == 'fdAT') {
      // Animation frames need a bit of tweaking.
      // We need to drop the first 4 bytes and set the correct type.
      $length = pack('N', $ilength-4);
      $type = 'IDAT';
      $chunk = substr($chunk,4);
      $parts[] = $length . $type . $chunk;
    }
  }
  // Now we just add the signature, header, and end chunks to every part.
  for ($i = 0; $i < count($parts); $i++) {
    $parts[$i] = $signature . $header . $parts[$i] . $end;
  }
  return $parts;
}
$filename = 'A.png';
$handle = fopen($filename, 'rb');
$filesize = filesize($filename);
$data = fread($handle, $filesize);
fclose($handle);
$parts = splitapng($data);
for ($i = 0; $i < count($parts); $i++) {
  $handle = fopen("part-$i.png",'wb');
  fwrite($handle,$parts[$i]);
  fclose($handle);
}

?>

i下载apng2gif
并用我的php使用此代码

<?php
header("Content-Type:text/html; charset=utf-8");

$link = substr($_POST["link"],0,-7).'_animation'.substr($_POST["link"],-7);

$linkname = substr($link,57,-32);
function link_code($link) {
  $headers = get_headers($link);
  return substr($headers[0], 9, 3);
}
$link_code = link_code($link);
if( $link_code == 200 ) {
file_put_contents($linkname.".png", fopen($link, 'r'));
  $x = iconv("cp950","UTF-8",shell_exec("apng2gif ".$linkname.".png ".$linkname.".gif"));
  echo "OKAY!";
}
else{
  echo "Nokay!";
}
?>

可以使用Ajax帖子链接进行APNG2GIF,并且检查它是否活着还是不活跃
谢谢FMW42:D

最新更新