php如何实现将图片保存为不同尺寸图片的图片类
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家分享的是有关php如何实现将图片保存为不同尺寸图片的图片类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:图片处理类.imagecls.php如下:<
千家信息网最后更新 2026年11月01日php如何实现将图片保存为不同尺寸图片的图片类
这篇文章给大家分享的是有关php如何实现将图片保存为不同尺寸图片的图片类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
具体如下:
图片处理类.imagecls.php如下:
$this->max_size) || (-1 == $this->max_size); } /** * 处理上传文件 * @param array $file 上传的文件 * @param string $dir 保存的目录 * @return bool */ function init($file, $dir = 'temp') { if(!is_array($file) || empty($file) || !$this->isUploadFile($file['tmp_name']) || trim($file['name']) == '' || $file['size'] == 0) { $this->file = array(); $this->error_code = -1; return false; } else { $file['size'] = intval($file['size']); $file['name'] = trim($file['name']); $file['thumb'] = ''; $file['ext'] = $this->fileExt($file['name']); $file['name'] = htmlspecialchars($file['name'], ENT_QUOTES); $file['is_image'] = $this->isImageExt($file['ext']); $file['file_dir'] = $this->getTargetDir($dir); $file['prefix'] = md5(microtime(true)).rand(10,99); $file['target'] = "./public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //相对 $file['local_target'] = APP_ROOT_PATH."public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //物理 $this->file = &$file; $this->error_code = 0; return true; } } /** * 保存文件 * @return bool */ function save() { if(empty($this->file) || empty($this->file['tmp_name'])) $this->error_code = -101; elseif(!$this->checkSize($this->file['size'])) $this->error_code = -105; elseif(!$this->file['is_image']) $this->error_code = -102; elseif(!$this->saveFile($this->file['tmp_name'], $this->file['local_target'])) $this->error_code = -103; elseif($this->file['is_image'] && (!$this->file['image_info'] = $this->getImageInfo($this->file['local_target'], true))) { $this->error_code = -104; @unlink($this->file['local_target']); } else { $this->error_code = 0; return true; } return false; } /** * 获取错误代码 * @return number */ function error() { return $this->error_code; } /** * 获取文件扩展名 * @return string */ function fileExt($file_name) { return addslashes(strtolower(substr(strrchr($file_name, '.'), 1, 10))); } /** * 根据扩展名判断文件是否为图像 * @param string $ext 扩展名 * @return bool */ function isImageExt($ext) { static $img_ext = array('jpg', 'jpeg', 'png', 'bmp','gif','giff'); return in_array($ext, $img_ext) ? 1 : 0; } /** * 获取图像信息 * @param string $target 文件路径 * @return mixed */ function getImageInfo($target) { $ext = es_imagecls::fileExt($target); $is_image = es_imagecls::isImageExt($ext); if(!$is_image) return false; elseif(!is_readable($target)) return false; elseif($image_info = @getimagesize($target)) { list($width, $height, $type) = !empty($image_info) ? $image_info : array('', '', ''); $size = $width * $height; if($is_image && !in_array($type, array(1,2,3,6,13))) return false; $image_info['type'] = strtolower(substr(image_type_to_extension($image_info[2]),1)); return $image_info; } else return false; } /** * 获取是否充许上传文件 * @param string $source 文件路径 * @return bool */ function isUploadFile($source) { return $source && ($source != 'none') && (is_uploaded_file($source) || is_uploaded_file(str_replace('\\\\', '\\', $source))); } /** * 获取保存的路径 * @param string $dir 指定的保存目录 * @return string */ function getTargetDir($dir) { if (!is_dir(APP_ROOT_PATH."public/".$dir)) { @mkdir(APP_ROOT_PATH."public/".$dir); @chmod(APP_ROOT_PATH."public/".$dir, 0777); } return $dir; } /** * 保存文件 * @param string $source 源文件路径 * @param string $target 目录文件路径 * @return bool */ private function saveFile($source, $target) { if(!es_imagecls::isUploadFile($source)) $succeed = false; elseif(@copy($source, $target)) $succeed = true; elseif(function_exists('move_uploaded_file') && @move_uploaded_file($source, $target)) $succeed = true; elseif (@is_readable($source) && (@$fp_s = fopen($source, 'rb')) && (@$fp_t = fopen($target, 'wb'))) { while (!feof($fp_s)) { $s = @fread($fp_s, 1024 * 512); @fwrite($fp_t, $s); } fclose($fp_s); fclose($fp_t); $succeed = true; } if($succeed) { $this->error_code = 0; @chmod($target, 0644); @unlink($source); } else { $this->error_code = 0; } return $succeed; } public function thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,$interlace=true,$filepath = '',$is_preview = true) { $info = es_imagecls::getImageInfo($image); if($info !== false) { $srcWidth = $info[0]; $srcHeight = $info[1]; $type = $info['type']; $interlace = $interlace? 1:0; unset($info); if($maxWidth > 0 && $maxHeight > 0) $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例 elseif($maxWidth == 0) $scale = $maxHeight/$srcHeight; elseif($maxHeight == 0) $scale = $maxWidth/$srcWidth; $paths = pathinfo($image); $paths['filename'] = trim(strtolower($paths['basename']),".".strtolower($paths['extension'])); $basefilename = explode("_",$paths['filename']); $basefilename = $basefilename[0]; if(empty($filepath)) { if($is_preview) $thumbname = $paths['dirname'].'/'.$basefilename.'_'.$maxWidth.'x'.$maxHeight.'.jpg'; else $thumbname = $paths['dirname'].'/'.$basefilename.'o_'.$maxWidth.'x'.$maxHeight.'.jpg'; } else $thumbname = $filepath; $thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname); if($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; if(!$is_preview) { //非预览模式写入原图 file_put_contents($thumbname,file_get_contents($image)); //用原图写入 return array('url'=>$thumburl,'path'=>$thumbname); } } else { // 缩略图尺寸 $width = (int)($srcWidth*$scale); $height = (int)($srcHeight*$scale); } if($gen == 1) { $width = $maxWidth; $height = $maxHeight; } // 载入原图 $createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type); if(!function_exists($createFun)) $createFun = 'imagecreatefromjpeg'; $srcImg = $createFun($image); //创建缩略图 if($type!='gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width, $height); else $thumbImg = imagecreate($width, $height); $x = 0; $y = 0; if($gen == 1 && $maxWidth > 0 && $maxHeight > 0) { $resize_ratio = $maxWidth/$maxHeight; $src_ratio = $srcWidth/$srcHeight; if($src_ratio >= $resize_ratio) { $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2; $width = ($height * $srcWidth) / $srcHeight; } else { $y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2; $height = ($width * $srcHeight) / $srcWidth; } } // 复制图片 if(function_exists("imagecopyresampled")) imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight); else imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight); if('gif'==$type || 'png'==$type) { $background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿色 imagecolortransparent($thumbImg,$background_color); // 设置为透明色,若注释掉该行则输出绿色的图 } // 对jpeg图形设置隔行扫描 if('jpg'==$type || 'jpeg'==$type) imageinterlace($thumbImg,$interlace); // 生成图片 imagejpeg($thumbImg,$thumbname,100); imagedestroy($thumbImg); imagedestroy($srcImg); return array('url'=>$thumburl,'path'=>$thumbname); } return false; } public function make_thumb($srcImg,$srcWidth,$srcHeight,$type,$maxWidth=200,$maxHeight=50,$gen = 0) { $interlace = $interlace? 1:0; if($maxWidth > 0 && $maxHeight > 0) $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例 elseif($maxWidth == 0) $scale = $maxHeight/$srcHeight; elseif($maxHeight == 0) $scale = $maxWidth/$srcWidth; if($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; } else { // 缩略图尺寸 $width = (int)($srcWidth*$scale); $height = (int)($srcHeight*$scale); } if($gen == 1) { $width = $maxWidth; $height = $maxHeight; } //创建缩略图 if($type!='gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width, $height); else $thumbImg = imagecreatetruecolor($width, $height); $x = 0; $y = 0; if($gen == 1 && $maxWidth > 0 && $maxHeight > 0) { $resize_ratio = $maxWidth/$maxHeight; $src_ratio = $srcWidth/$srcHeight; if($src_ratio >= $resize_ratio) { $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2; $width = ($height * $srcWidth) / $srcHeight; } else { $y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2; $height = ($width * $srcHeight) / $srcWidth; } } // 复制图片 if(function_exists("imagecopyresampled")) imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight); else imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight); if('gif'==$type || 'png'==$type) { $background_color = imagecolorallocate($thumbImg, 255,255,255); // 指派一个绿色 imagecolortransparent($thumbImg,$background_color); // 设置为透明色,若注释掉该行则输出绿色的图 } // 对jpeg图形设置隔行扫描 if('jpg'==$type || 'jpeg'==$type) imageinterlace($thumbImg,$interlace); return $thumbImg; } public function water($source,$water,$alpha=80,$position="0") { //检查文件是否存在 if(!file_exists($source)||!file_exists($water)) return false; //图片信息 $sInfo = es_imagecls::getImageInfo($source); $wInfo = es_imagecls::getImageInfo($water); //如果图片小于水印图片,不生成图片 if($sInfo["0"] < $wInfo["0"] || $sInfo['1'] < $wInfo['1']) return false; if(is_animated_gif($source)) { require_once APP_ROOT_PATH."system/utils/gif_encoder.php"; require_once APP_ROOT_PATH."system/utils/gif_reader.php"; $gif = new GIFReader(); $gif->load($source); foreach($gif->IMGS['frames'] as $k=>$img) { $im = imagecreatefromstring($gif->getgif($k)); //为im加水印 $sImage=$im; $wCreateFun="imagecreatefrom".$wInfo['type']; if(!function_exists($wCreateFun)) $wCreateFun = 'imagecreatefromjpeg'; $wImage=$wCreateFun($water); //设定图像的混色模式 imagealphablending($wImage, true); switch (intval($position)) { case 0: break; //左上 case 1: $posY=0; $posX=0; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //右上 case 2: $posY=0; $posX=$sInfo[0]-$wInfo[0]; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //左下 case 3: $posY=$sInfo[1]-$wInfo[1]; $posX=0; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //右下 case 4: $posY=$sInfo[1]-$wInfo[1]; $posX=$sInfo[0]-$wInfo[0]; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //居中 case 5: $posY=$sInfo[1]/2-$wInfo[1]/2; $posX=$sInfo[0]/2-$wInfo[0]/2; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; } //end im加水印 ob_start(); imagegif($sImage); $content = ob_get_contents(); ob_end_clean(); $frames [ ] = $content; $framed [ ] = $img['frameDelay']; } $gif_maker = new GIFEncoder ( $frames, $framed, 0, 2, 0, 0, 0, "bin" //bin为二进制 url为地址 ); $image_rs = $gif_maker->GetAnimation ( ); //如果没有给出保存文件名,默认为原图像名 @unlink($source); //保存图像 file_put_contents($source,$image_rs); return true; } //建立图像 $sCreateFun="imagecreatefrom".$sInfo['type']; if(!function_exists($sCreateFun)) $sCreateFun = 'imagecreatefromjpeg'; $sImage=$sCreateFun($source); $wCreateFun="imagecreatefrom".$wInfo['type']; if(!function_exists($wCreateFun)) $wCreateFun = 'imagecreatefromjpeg'; $wImage=$wCreateFun($water); //设定图像的混色模式 imagealphablending($wImage, true); switch (intval($position)) { case 0: break; //左上 case 1: $posY=0; $posX=0; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //右上 case 2: $posY=0; $posX=$sInfo[0]-$wInfo[0]; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //左下 case 3: $posY=$sInfo[1]-$wInfo[1]; $posX=0; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //右下 case 4: $posY=$sInfo[1]-$wInfo[1]; $posX=$sInfo[0]-$wInfo[0]; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; //居中 case 5: $posY=$sInfo[1]/2-$wInfo[1]/2; $posX=$sInfo[0]/2-$wInfo[0]/2; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha); break; } //如果没有给出保存文件名,默认为原图像名 @unlink($source); //保存图像 imagejpeg($sImage,$source,100); imagedestroy($sImage); }}if(!function_exists('image_type_to_extension')){ function image_type_to_extension($imagetype) { if(empty($imagetype)) return false; switch($imagetype) { case IMAGETYPE_GIF : return '.gif'; case IMAGETYPE_JPEG : return '.jpeg'; case IMAGETYPE_PNG : return '.png'; case IMAGETYPE_SWF : return '.swf'; case IMAGETYPE_PSD : return '.psd'; case IMAGETYPE_BMP : return '.bmp'; case IMAGETYPE_TIFF_II : return '.tiff'; case IMAGETYPE_TIFF_MM : return '.tiff'; case IMAGETYPE_JPC : return '.jpc'; case IMAGETYPE_JP2 : return '.jp2'; case IMAGETYPE_JPX : return '.jpf'; case IMAGETYPE_JB2 : return '.jb2'; case IMAGETYPE_SWC : return '.swc'; case IMAGETYPE_IFF : return '.aiff'; case IMAGETYPE_WBMP : return '.wbmp'; case IMAGETYPE_XBM : return '.xbm'; default : return false; } }}?>2.get_spec_img()调用图片类,然后再用下面的方法保存不同规格的图片并返回图片连接
//获取相应规格的图片地址 //gen=0:保持比例缩放,不剪裁,如高为0,则保证宽度按比例缩放 gen=1:保证长宽,剪裁 function get_spec_image($img_path,$width=0,$height=0,$gen=0,$is_preview=true) { if($width==0) $new_path = $img_path; else { $img_name = substr($img_path,0,-4); $img_ext = substr($img_path,-3); if($is_preview) $new_path = $img_name."_".$width."x".$height.".jpg"; else $new_path = $img_name."o_".$width."x".$height.".jpg"; if(!file_exists($new_path)) { require_once "imagecls.php"; $imagec = new imagecls(); $thumb = $imagec->thumb($img_path,$width,$height,$gen,true,"",$is_preview); if(app_conf("PUBLIC_DOMAIN_ROOT")!='') { $paths = pathinfo($new_path); $path = str_replace("./","",$paths['dirname']); $filename = $paths['basename']; $pathwithoupublic = str_replace("public/","",$path); $file_data = @file_get_contents($path.$file); $img = @imagecreatefromstring($file_data); if($img!==false) { $save_path = "public/".$path; if(!is_dir($save_path)) { @mk_dir($save_path); } @file_put_contents($save_path.$name,$file_data); } } } } return $new_path; }3.使用方法:
//im:将店铺图片保存为3种规格:小图:48x48,中图120x120,大图200x200$small_url=get_spec_image($data['image'],48,48,0);$middle_url=get_spec_image($data['image'],120,120,0);$big_url=get_spec_image($data['image'],200,200,0);感谢各位的阅读!关于"php如何实现将图片保存为不同尺寸图片的图片类"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
图片
图像
文件
生成
混合
原图
路径
尺寸
比例
绿色
不同
扩展名
模式
水印
目录
规格
信息
内容
图形
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡网
互联网络科技
喔噻互联网科技有限公司
重生之互联网科技帝国
科技互联网政务服务
麻工互联网科技
上海互联网科技有限公司
互联网 卓越科技
互联网金融科技平台
美国互联网黑科技
互联网科技小额贷款
狮子座互联网科技培训
互联网科技美容
玖二柒互联网科技公司待遇
呼和浩特新华互联网科技学院
米聚互联网科技南京有限公司排面
山东子淼互联网科技有限公司
风投北京互联网科技
广州智享互联网科技
艺电能源互联网科技有限公司招聘
疫情对互联网科技公司影响
互联网与科技金融数据
上海挚品互联网科技
互联网与未来科技
互联网系的金融科技公司
互联网科技公司有风险吗
互联网科技人工智能实验室
元气玛特互联网科技公司是外包吗
北京军民互联网科技公司
河南商务圈互联网科技有限公司