目录
说明:主要是针对纯前端生成GIF图片质量问题做的调研;
目标:前端把CANVAS处理的每帧图片转成base64图片传至后台,后台生成最终GIF图片返回给前台展示;
环境需要:
PHP所需扩展:imagick扩展
phpstudy安装imagick扩展
https://blog.csdn.net/qq_16494241/article/details/126845475
2、在php.ini 中加入 extension=php_imagick.dll
PHP Imagick 示例:
实现:
透明GIF图帧重叠问题处理:
$image->readImage 后加
$image->setImageDispose(3); // 在此帧覆盖之前清除图像
php针对项目目录下图片集处理:
步骤:
读取本地图片集 -> 配置相关参数,合成GIF图 -> 存储本地gif-file目录中 -> 转成base64图片使用 -> 删除最终生成并保存在本地的图片
代码示例:
setFormat($type); foreach ( $filelist as $file ){ $image = new Imagick(); $image->readImage( $file ); //合并图片 $image->setImageDispose(3); // 在此帧覆盖之前清除图像 $animation->addImage( $image ); //加入到刚才建立的对象 $animation->setImageDelay( $num ); //为每一帧单独设置延迟。修改动画Gif,使其帧以可变速度播放,从显示 50 毫秒到 0 毫秒不等,这将导致在大多数浏览器中跳过帧。 unset( $image ); //消除内存里的图像资源 } //调试是否生成gif图片 //header( "Content-Type: image/gif" ); //echo( $animation->getImagesBlob() ); //新图片文件名组合 $images = $prefix . time() . rndStr() . '.' . $type; // echo $images; //生成图片并保存至gif-file目录中 $animation->writeImages( 'gif-file/' . $images, true ); // $animation->writeImages( $images, true ); //复制图片到指定位置 // copy($images, 'gif-file/' . $images); // 生成后的图片转base64图片使用 $pic = 'gif-file/' . $images; $pic = "data:image/" . $type . ";base64," . base64_encode(file_get_contents($pic)); echo $pic; echo ''; //删除最终生成并保存的图片 unlink('gif-file/' . $images); // echo '';}?>
php处理 base64格式 图片集处理:
步骤:
读取 base64格式 图片集 -> 存储每张base64图片至本地 -> 配置相关参数,合成GIF图,删除之前存储在本地的单张base64图片 -> 存储本地gif-file目录中 -> 转成base64图片使用 -> 删除最终生成并保存在本地的图片
代码示例:
setFormat($type); foreach ( $filelist as $file ){ $image = new Imagick(); // 存储base64图片 $name = time() . rndStr(); if(stripos($file,'base64,')){ $fileArr = explode('base64,',$file); $img = str_replace(' ', '+', $fileArr[1]); }else{ $img = str_replace(' ', '+', $file); } $img = base64_decode($img); //存储图片,注意文件夹是否有写入权限 $dir = iconv("UTF-8", "GBK", "upfile"); if (!file_exists($dir)){ mkdir ($dir,0777,true); } $f = fopen('upfile/' . $name . '.jpg', 'w+'); fwrite($f, $img); fclose($f); $image->readImage( 'upfile/' . $name . '.jpg' ); //合并图片 // $image->readImage( $file ); //合并图片 $image->setImageDispose(3); // 在此帧覆盖之前清除图像 $animation->addImage( $image ); //加入到刚才建立的对象 $animation->setImageDelay( $num ); //为每一帧单独设置延迟。修改动画Gif,使其帧以可变速度播放,从显示 50 毫秒到 0 毫秒不等,这将导致在大多数浏览器中跳过帧。 unset( $image ); //消除内存里的图像资源 // 删除之前存储的base64图片 unlink('upfile/' . $name . '.jpg'); } //调试是否生成gif图片 //header( "Content-Type: image/gif" ); //echo( $animation->getImagesBlob() ); //新图片文件名组合 $images = $prefix . time() . rndStr() . '.' . $type; // echo $images; //生成图片并保存至gif-file目录中 $animation->writeImages( 'gif-file/' . $images, true ); // $animation->writeImages( $images, true ); //复制图片到指定位置 // copy($images, 'gif-file/' . $images); // 生成后的图片转base64图片使用 $pic = 'gif-file/' . $images; $pic = "data:image/" . $type . ";base64," . base64_encode(file_get_contents($pic)); echo $pic; echo ''; //删除最终生成并保存的图片 unlink('gif-file/' . $images); // echo '';}?>
php处理 base64格式 图片集处理的,最终展示,代码中多个 / 被处理了,如:
来源地址:https://blog.csdn.net/qq_16494241/article/details/127245975