PHP-图片压缩

Jun 23, 2016 pm 02:30 PM

方式一:

<?php/*----------------------------------------------------------------------函数:调整图片尺寸或生成缩略图修改:2009-8-8返回:True/False参数:   $Image   需要调整的图片(含路径)   $Dw=450   调整时最大宽度;缩略图时的绝对宽度   $Dh=450   调整时最大高度;缩略图时的绝对高度   $Type=1   1,调整尺寸; 2,生成缩略图作者:Seven(QQ:9256114)WWW.7DI.NET*/$path='img/';//路径$phtypes=array(   'img/gif',   'img/jpg',   'img/jpeg',   'img/bmp',   'img/pjpeg',   'img/x-png');Function Img($Image,$Dw=450,$Dh=450,$Type=1){   IF(!File_Exists($Image)){    Return False;   }   #如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值   IF($Type!=1){    Copy($Image,Str_Replace(".","_x.",$Image));    $Image=Str_Replace(".","_x.",$Image);   }   #取得文件的类型,根据不同的类型建立不同的对象   $ImgInfo=GetImageSize($Image);   Switch($ImgInfo[2]){   Case 1:    $Img = @ImageCreateFromGIF($Image);   Break;   Case 2:    $Img = @ImageCreateFromJPEG($Image);   Break;   Case 3:    $Img = @ImageCreateFromPNG($Image);   Break;   }   #如果对象没有创建成功,则说明非图片文件   IF(Empty($Img)){    #如果是生成缩略图的时候出错,则需要删掉已经复制的文件    IF($Type!=1){Unlink($Image);}    Return False;   }   #如果是执行调整尺寸操作则   IF($Type==1){    $w=ImagesX($Img);    $h=ImagesY($Img);    $width = $w;    $height = $h;    IF($width>$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;   }}?><html><body><form  method="post" enctype="multipart/form-data" name="form1">  <table>    <tr><td>上传图片</td></tr>    <tr><td><input type="file" name="photo" size="20" /></td></tr>  <tr><td><input type="submit" value="上传"/></td></tr>  </table>  允许上传的文件类型为:<?=implode(', ',$phtypes)?></form><?php if($_SERVER['REQUEST_METHOD']=='POST'){    if (!is_uploaded_file($_FILES["photo"][tmp_name])){      echo "图片不存在";      exit();    }    if(!is_dir('img')){//路径若不存在则创建     mkdir('img');    }    $upfile=$_FILES["photo"];     $pinfo=pathinfo($upfile["name"]);    $name=$pinfo['basename'];//文件名    $tmp_name=$upfile["tmp_name"];    $file_type=$pinfo['extension'];//获得文件类型    $showphpath=$path.$name;       if(in_array($upfile["type"],$phtypes)){      echo "文件类型不符!";      exit();     }   if(move_uploaded_file($tmp_name,$path.$name)){    echo "成功!"; Img($showphpath,100,800,2);   }   echo "<img  src=\"".$showphpath."\"  / alt="PHP-图片压缩" >"; }?></body></html>
Salin selepas log masuk

方式二:

PHP图片压缩的类<?phpclass ThumbHandler{var $dst_img;// 目标文件var $h_src; // 图片资源句柄var $h_dst;// 新图句柄var $h_mask;// 水印句柄var $img_create_quality = 100;// 图片生成质量var $img_display_quality = 80;// 图片显示质量,默认为75var $img_scale = 0;// 图片缩放比例var $src_w = 0;// 原图宽度var $src_h = 0;// 原图高度var $dst_w = 0;// 新图总宽度var $dst_h = 0;// 新图总高度var $fill_w;// 填充图形宽var $fill_h;// 填充图形高var $copy_w;// 拷贝图形宽var $copy_h;// 拷贝图形高var $src_x = 0;// 原图绘制起始横坐标var $src_y = 0;// 原图绘制起始纵坐标var $start_x;// 新图绘制起始横坐标var $start_y;// 新图绘制起始纵坐标var $mask_word;// 水印文字var $mask_img;// 水印图片var $mask_pos_x = 0;// 水印横坐标var $mask_pos_y = 0;// 水印纵坐标var $mask_offset_x = 5;// 水印横向偏移var $mask_offset_y = 5;// 水印纵向偏移var $font_w;// 水印字体宽var $font_h;// 水印字体高var $mask_w;// 水印宽var $mask_h;// 水印高var $mask_font_color = "#ffffff";// 水印文字颜色var $mask_font = 2;// 水印字体var $font_size;// 尺寸var $mask_position = 0;// 水印位置var $mask_img_pct = 50;// 图片合并程度,值越大,合并程序越低var $mask_txt_pct = 50;// 文字合并程度,值越小,合并程序越低var $img_border_size = 0;// 图片边框尺寸var $img_border_color;// 图片边框颜色var $_flip_x=0;// 水平翻转次数var $_flip_y=0;// 垂直翻转次数var $cut_type=0;// 剪切类型var $img_type;// 文件类型// 文件类型定义,并指出了输出图片的函数var $all_type = array(       "jpg"   => 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 < 1)         {            die("图片缩放比例不得小于1");         }         $this->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);// 填充背景色       }}
Salin selepas log masuk

  

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Pembalakan PHP: Amalan Terbaik untuk Analisis Log PHP Pembalakan PHP: Amalan Terbaik untuk Analisis Log PHP Mar 10, 2025 pm 02:32 PM

Pembalakan PHP adalah penting untuk memantau dan menyahpepijat aplikasi web, serta menangkap peristiwa kritikal, kesilapan, dan tingkah laku runtime. Ia memberikan pandangan yang berharga dalam prestasi sistem, membantu mengenal pasti isu -isu, dan menyokong penyelesaian masalah yang lebih cepat

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Terangkan konsep pengikatan statik lewat dalam PHP. Terangkan konsep pengikatan statik lewat dalam PHP. Mar 21, 2025 pm 01:33 PM

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Mar 28, 2025 pm 05:12 PM

Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.

See all articles