PHP-图片压缩
程序员文章站
2022-05-29 15:22:09
...
方式一:
$Dw){ $Par=$Dw/$width; $width=$Dw; $height=$height*$Par; IF($height>$Dh){ $Par=$Dh/$height; $height=$Dh; $width=$width*$Par; } }ElseIF($height>$Dh){ $Par=$Dh/$height; $height=$Dh; $width=$width*$Par; IF($width>$Dw){ $Par=$Dw/$width; $width=$Dw; $height=$height*$Par; } }Else{ $width=$width; $height=$height; } $nImg = ImageCreateTrueColor($width,$height); #新建一个真彩色画布 ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);#重采样拷贝部分图像并调整大小 ImageJpeg ($nImg,$Image); #以JPEG格式将图像输出到浏览器或文件 Return True; #如果是执行生成缩略图操作则 }Else{ $w=ImagesX($Img); $h=ImagesY($Img); $width = $w; $height = $h; $nImg = ImageCreateTrueColor($Dw,$Dh); IF($h/$w>$Dh/$Dw){ #高比较大 $width=$Dw; $height=$h*$Dw/$w; $IntNH=$height-$Dh; ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h); }Else{ #宽比较大 $height=$Dh; $width=$w*$Dh/$h; $IntNW=$width-$Dw; ImageCopyReSampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h); } ImageJpeg ($nImg,$Image); Return True; }}?>"; }?>
方式二:
PHP图片压缩的类 array("output"=>"imagejpeg"), "gif" => array("output"=>"imagegif"), "png" => array("output"=>"imagepng"), "wbmp" => array("output"=>"image2wbmp"), "jpeg" => array("output"=>"imagejpeg"));/** * 构造函数 */function ThumbHandler(){ $this->mask_font_color = "#ffffff"; $this->font = 2; $this->font_size = 12;}/** * 取得图片的宽 */function getImgWidth($src){ return imagesx($src);}/** * 取得图片的高 */function getImgHeight($src){ return imagesy($src);}/** * 设置图片生成路径 * * @param string $src_img 图片生成路径 */function setSrcImg($src_img, $img_type=null){ if(!file_exists($src_img)) { die("图片不存在"); } if(!empty($img_type)) { $this->img_type = $img_type; } else { $this->img_type = $this->_getImgType($src_img); } $this->_checkValid($this->img_type); // file_get_contents函数要求php版本>4.3.0 $src = ''; if(function_exists("file_get_contents")) { $src = file_get_contents($src_img); } else { $handle = fopen ($src_img, "r"); while (!feof ($handle)) { $src .= fgets($fd, 4096); } fclose ($handle); } if(empty($src)) { die("图片源为空"); } $this->h_src = @ImageCreateFromString($src); $this->src_w = $this->getImgWidth($this->h_src); $this->src_h = $this->getImgHeight($this->h_src);}/** * 设置图片生成路径 * * @param string $dst_img 图片生成路径 */function setDstImg($dst_img){ $arr = explode('/',$dst_img); $last = array_pop($arr); $path = implode('/',$arr); $this->_mkdirs($path); $this->dst_img = $dst_img;}/** * 设置图片的显示质量 * * @param string $n 质量 */function setImgDisplayQuality($n){ $this->img_display_quality = (int)$n;}/** * 设置图片的生成质量 * * @param string $n 质量 */function setImgCreateQuality($n){ $this->img_create_quality = (int)$n;}/** * 设置文字水印 * * @param string $word 水印文字 * @param integer $font 水印字体 * @param string $color 水印字体颜色 */function setMaskWord($word){ $this->mask_word .= $word;}/** * 设置字体颜色 * * @param string $color 字体颜色 */function setMaskFontColor($color="#ffffff"){ $this->mask_font_color = $color;}/** * 设置水印字体 * * @param string|integer $font 字体 */function setMaskFont($font=2){ if(!is_numeric($font) && !file_exists($font)) { die("字体文件不存在"); } $this->font = $font;}/** * 设置文字字体大小,仅对truetype字体有效 */function setMaskFontSize($size = "12"){ $this->font_size = $size;}/** * 设置图片水印 * * @param string $img 水印图片源 */function setMaskImg($img){ $this->mask_img = $img;}/** * 设置水印横向偏移 * * @param integer $x 横向偏移量 */function setMaskOffsetX($x){ $this->mask_offset_x = (int)$x;}/** * 设置水印纵向偏移 * * @param integer $y 纵向偏移量 */function setMaskOffsetY($y){ $this->mask_offset_y = (int)$y;}/** * 指定水印位置 * * @param integer $position 位置,1:左上,2:左下,3:右上,0/4:右下 */function setMaskPosition($position=0){ $this->mask_position = (int)$position;}/** * 设置图片合并程度 * * @param integer $n 合并程度 */function setMaskImgPct($n){ $this->mask_img_pct = (int)$n;}/** * 设置文字合并程度 * * @param integer $n 合并程度 */function setMaskTxtPct($n){ $this->mask_txt_pct = (int)$n;}/** * 设置缩略图边框 * * @param (类型) (参数名) (描述) */function setDstImgBorder($size=1, $color="#000000"){ $this->img_border_size = (int)$size; $this->img_border_color = $color;}/** * 水平翻转 */function flipH(){ $this->_flip_x++;}/** * 垂直翻转 */function flipV(){ $this->_flip_y++;}/** * 设置剪切类型 * * @param (类型) (参数名) (描述) */function setCutType($type){ $this->cut_type = (int)$type;}/** * 设置图片剪切 * * @param integer $width 矩形剪切 */function setRectangleCut($width, $height){ $this->fill_w = (int)$width; $this->fill_h = (int)$height;}/** * 设置源图剪切起始坐标点 * * @param (类型) (参数名) (描述) */function setSrcCutPosition($x, $y){ $this->src_x = (int)$x; $this->src_y = (int)$y;}/** * 创建图片,主函数 * @param integer $a 当缺少第二个参数时,此参数将用作百分比, * 否则作为宽度值 * @param integer $b 图片缩放后的高度 */function createImg($a, $b=null){ $num = func_num_args(); if(1 == $num) { $r = (int)$a; if($r img_scale = $r; $this->_setNewImgSize($r); } if(2 == $num) { $w = (int)$a; $h = (int)$b; if(0 == $w) { die("目标宽度不能为0"); } if(0 == $h) { die("目标高度不能为0"); } $this->_setNewImgSize($w, $h); } if($this->_flip_x%2!=0) { $this->_flipH($this->h_src); } if($this->_flip_y%2!=0) { $this->_flipV($this->h_src); } $this->_createMask(); $this->_output(); // 释放 if(imagedestroy($this->h_src) && imagedestroy($this->h_dst)) { Return true; } else { Return false; }}/** * 生成水印,调用了生成水印文字和水印图片两个方法 */function _createMask(){ if($this->mask_word) { // 获取字体信息 $this->_setFontInfo(); if($this->_isFull()) { die("水印文字过大"); } else { $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); $white = ImageColorAllocate($this->h_dst,255,255,255); imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 $this->_drawBorder(); imagecopyresampled( $this->h_dst, $this->h_src, $this->start_x, $this->start_y, $this->src_x, $this->src_y, $this->fill_w, $this->fill_h, $this->copy_w, $this->copy_h); $this->_createMaskWord($this->h_dst); } } if($this->mask_img) { $this->_loadMaskImg();//加载时,取得宽高 if($this->_isFull()) { // 将水印生成在原图上再拷 $this->_createMaskImg($this->h_src); $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); $white = ImageColorAllocate($this->h_dst,255,255,255); imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 $this->_drawBorder(); imagecopyresampled( $this->h_dst, $this->h_src, $this->start_x, $this->start_y, $this->src_x, $this->src_y, $this->fill_w, $this->start_y, $this->copy_w, $this->copy_h); } else { // 创建新图并拷贝 $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); $white = ImageColorAllocate($this->h_dst,255,255,255); imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 $this->_drawBorder(); imagecopyresampled( $this->h_dst, $this->h_src, $this->start_x, $this->start_y, $this->src_x, $this->src_y, $this->fill_w, $this->fill_h, $this->copy_w, $this->copy_h); $this->_createMaskImg($this->h_dst); } } if(empty($this->mask_word) && empty($this->mask_img)) { $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); $white = ImageColorAllocate($this->h_dst,255,255,255); imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 $this->_drawBorder(); imagecopyresampled( $this->h_dst, $this->h_src, $this->start_x, $this->start_y, $this->src_x, $this->src_y, $this->fill_w, $this->fill_h, $this->copy_w, $this->copy_h); }}/** * 画边框 */function _drawBorder(){ if(!empty($this->img_border_size)) { $c = $this->_parseColor($this->img_border_color); $color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]); imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 填充背景色 }}