1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Linux环境—JPEG/JPG/PNG图片转换WEBP格式(二)

Linux环境—JPEG/JPG/PNG图片转换WEBP格式(二)

时间:2022-08-05 15:24:57

相关推荐

Linux环境—JPEG/JPG/PNG图片转换WEBP格式(二)

PHP源码编写<?php/***Use :将JPEG/JPG/PNG的图片转换为WEBP格式*User:yKan_SF*Date: -2-27*Time:下午8:22*/ini_set('display_errors',1);classimagick_convert{//原始图片绝对路径private$str_old_file='';//转换webp默认扩展名private$str_default_ext='webp';//支持转换的图片格式private$arr_image_ext=null;

/***默认构造函数*/publicfunction__construct($str_image_path){$this->str_old_file=$str_image_path;}

/***Linux下ImageMagick+libwebp+php扩展imagick转化jpeg/jpg/png图片文件*@paramstring$webp_dirwebp图片的存储绝对路径*@returnstring返回处理之后的图片绝对路径*/publicfunctionconvert_transform_images($webp_dir=''){//文件是否存在if(!is_file($this->str_old_file)){//WEBP格式转换:待转换的图片路径不正确return$this->str_old_file;}//图片基本信息$ext=pathinfo($this->str_old_file,PATHINFO_EXTENSION);$ext=empty($ext)?'':strtolower($ext);//图片质量$this->arr_image_ext=array('jpeg'=>Imagick::COMPRESSION_JPEG,'jpg'=>Imagick::COMPRESSION_JPEG,'png'=>Imagick::COMPRESSION_UNDEFINED,);//根据后缀名把jpg或者png转成webpif(!in_array($ext,array_keys($this->arr_image_ext))){//WEBP格式转换:暂不支持该格式转换,目前仅支持转换jpeg,jpg和png格式return$this->str_old_file;}//默认webp图片新路径if(empty($webp_dir)){$webp_dir=rtrim($this->str_old_file,$ext).$this->str_default_ext;}//开始转换try{//原图的质量$new_q=$this->get_img_quality($ext);//转换成webp格式$this->do_jpg_transform_webp($webp_dir,$new_q);}catch(Exception$e){//WEBP格式转换:工具转换异常,切换至GD库转换$webp_dir=$this->php_gd_image_webp($ext,$webp_dir);}//睡眠0.2秒usleep(20000);if(is_file($webp_dir)){//删除原始图片 + 设置WEBP图片访问权限chmod($webp_dir,0777);unlink($this->str_old_file);//WEBP格式转换:转换成功return$webp_dir;} //WEBP格式转换:转换失败,返回原始图片路径return$this->str_old_file;}

/***获取图片的质量*@paramstring$str_ext图片扩展名*@returnint图片的质量*/privatefunctionget_img_quality($str_ext){$resource=newImagick($this->str_old_file);//png特殊处理if($str_ext=='png'){$resource->setImageFormat('PNG');}$resource->setImageCompression($this->arr_image_ext[$str_ext]);$current=$resource->getImageCompressionQuality();$resource->clear();$resource->destroy();if(!isset($current)||empty($current)){$current=80;}$resource->clear();$resource->destroy();return$current;}

/***jpg/jpeg/png格式转换成webp格式*@paramstring$webp_img_pathwebp图片的真实路径*@paramint$int_q图片的压缩质量*/privatefunctiondo_jpg_transform_webp($webp_img_path,$int_q=80){exec("cwebp-q{$int_q}{$this->str_old_file}-o{$webp_img_path}");}

/***应用PHP自身的GD库重新生成一张webp格式的图片,但是有概率生成空白图(有风险)*@paramstring$ext文件扩展名*@paramstring$webp_img_path生成webp文件的绝对路径*@returnstring返回处理之后的图片绝对路径*/privatefunctionphp_gd_image_webp($ext,$webp_img_path){//jpg处理使用jpeg$ext=$ext=='jpg'?'jpeg':$ext;//拼接函数名imagecreatefromjpeg还是imagecreatefrompng$funName='imagecreatefrom'.$ext;//开始转换$obj_img=null;try{//打开这个图片资源$obj_img=$funName($this->str_old_file);//用这个图片资源创建一个webp图片,存在路径$tdirimagewebp($obj_img,$webp_img_path);}catch(Exception$e){

}//销毁画布资源if($obj_img!=null){imagedestroy($obj_img);}//睡眠0.3秒return$webp_img_path;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。