2
A
回答
1
下面是一些示例代碼,它將採用字節數組的形式將png作爲字節數組的數組返回。
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 = 'example.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);
}
+0
真棒...工作像一個魅力。謝謝你SOOOOO很多 – 2013-05-08 09:49:15
+0
嗨!我只注意到腳本結果中的錯誤。出於某種原因,只有第一幀是有效的,其他人在圖像中有一些錯誤。因爲這個錯誤的圖像在PHP和Firefox瀏覽器中無效。你有什麼想法,爲什麼? – 2013-09-11 09:29:38
相關問題
- 1. 如何動畫PNG圖像
- 2. %android png動畫
- 3. 動畫PNG幀
- 4. 如何使用openlayers3動畫圖像png
- 5. 如何在Delphi中使用動畫PNG?
- 6. 如何加載和顯示動畫PNG
- 7. 三維動畫與PNG圖像
- 8. 加載動畫PNG
- 9. IOS:動畫爲.png
- 10. 動畫PNG狀態
- 11. 如何將每個動畫與角度中的每個元素分開?
- 12. CATransform3D將UIView與3D打開門動畫拆分成一半
- 13. PNG覆蓋在活動畫布動畫
- 14. 如何將flash動畫片段轉換爲png序列?
- 15. 如何將多個PNG文件轉換爲動畫GIF?
- 16. 如何將整個可滾動畫布保存爲PNG?
- 17. 如何將整個可滾動畫布保存爲Png
- 18. 動畫UIView問題(將展開的動畫與縮小的動畫匹配)
- 19. PHP:如何將png文件的一部分設置爲透明?
- 20. 直接2D gnuplot PNG動畫?
- 21. 使用jQuery動畫PNG?
- 22. 如何動畫與CAScrollLayer動畫
- 23. 將畫布另存爲PNG
- 24. 將畫布另存爲PNG
- 25. 將畫布另存爲PNG
- 26. PHP array_search:如何將key == 0與false區分開來?
- 27. 如何將PHP與Silex和Symfony2區分開來?
- 28. iphone開發:動畫與NSTimer
- 29. Slick2D如何將PNG分配給變量
- 30. 使用png文件的畫布動畫
您可以用'exec'或類似的功能呢? – 2013-05-08 08:31:57
不幸的是,不能使用exec。但感謝您的替代解決方案:) – 2013-05-08 09:49:55