public static function makeGifFromZip($zip_file_path, $delay) { $dir = $zip_file_path . 'dir/'; $zip = new ZipArchive(); $res = $zip->open($zip_file_path); if ($res === TRUE) { $zip->extractTo($dir); $zip->close(); } $files = glob($dir . '/*'); ksort($files); $mw = NewMagickWand(); for ($i = 0, $l = count($files); $i < $l; $i++) { $rw = NewMagickWand(); MagickReadImage($rw, $files[$i]); MagickSetImageDelay($rw, intval($delay) / 10); //magickwand比较特殊,>用的不是毫秒,所以毫秒需要转成1/100秒 MagickAddImage($mw, $rw); DestroyMagickWand($rw); } MagickSetFormat($mw, 'gif'); $gif_file_path = $zip_file_path . '.gif'; MagickWriteImages($mw, $gif_file_path, true); DestroyMagickWand($mw); //todo 删除目录 return $gif_file_path; }
public function generateImg($img, $desFile = "") { MagickCommentImage($img, "Image Creator (MagickWand) By Windy2000"); $type = MagickGetImageFormat($img); $frame_count = MagickGetNumberImages($img); if (empty($type)) { $type = $frame_count > 1 ? "GIF" : "JPG"; } if (strpos("tile,gradient,caption,label,logo,netscape,rose", strtolower($type)) !== false) { $type = "PNG"; } MagickSetFormat($img, $type); if (empty($desFile)) { //header("Content-Type: ".MagickGetMimeType($img)); if ($frame_count > 1) { MagickEchoImagesBlob($img); } else { MagickEchoImageBlob($img); } } else { if ($frame_count > 1) { MagickWriteImages($img, $desFile, MagickTrue); } else { MagickWriteImage($img, $desFile); } } if (WandHasException($img)) { $this->Error($img); } $result = MagickGetExceptionType($img); DestroyMagickWand($img); return $result; }