教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 网站编程 > PHP教程 >

PHP图片缩放、大小的ImageCopyResized和imagecopyresampled方法.

时间:2013-12-25 20:46来源:未知 作者:ken 点击:

主要说明下几个用到的函数:

imagecreatefromjpeg() 返回一图像标识符,代表了从给定的文件名取得的图像。

int imagesx ( resource image) 返回 image 所代表的图像的宽度。

int imagesy ( resource image) 返回 image 所代表的图像的高度。

bool function_exists ( string function_name)   定义指定的函数则返回 true 值,其它情形均返回 false 值。

imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

imagecreate() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。

int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)

imagecopyresized 与上面方法相同,区别见下面说明:
与上面的参数相同

 

ImageCopyResized()函数在所有GD版本中有效,但其缩放图像的算法比较粗糙。

imagecopyresampled(),其像素插值算法得到的图像边缘比较平滑,但该函数的速度比ImageCopyResized()慢。


ImageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);

ImageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

int srcW, int srcH)   重采样拷贝部分图像并调整大小

$dst_image:新建的图片

$src_image:需要载入的图片

$dst_x:设定需要载入的图片在新图中的x坐标

$dst_y:设定需要载入的图片在新图中的y坐标

$src_x:设定载入图片要载入的区域x坐标

$src_y:设定载入图片要载入的区域y坐标

$dst_w:设定载入的原图的宽度(在此设置缩放)

$dst_h:设定载入的原图的高度(在此设置缩放)

$src_w:原图要载入的宽度

$src_h:原图要载入的高度

 

imagejpeg() 从 image 图像以 filename 为文件名创建一个 JPEG 图像。

imagedestroy() 释放与 image 关联的内存。

<?php  //站长教学网 eduyo.com
    header("Content-Type:text/html;charset=utf-8"); 
    $im = imagecreatefromjpeg('oldsrc.jpg'); 
    $maxwidth = 75; 
    $maxheight = 75; 
    $name = 'newpic'; 
    $filetype = '.jpg'; 
    $pic_width = imagesx($im); 
    $pic_height = imagesy($im); 
 
    if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) 
    { 
        if($maxwidth && $pic_width>$maxwidth)   //原图宽度大于最大宽度 
        { 
            $widthratio = $maxwidth/$pic_width; 
            $resizewidth_tag = true; 
        } 
 
        if($maxheight && $pic_height>$maxheight) //原图高度度大于最大高度 
        { 
            $heightratio = $maxheight/$pic_height; 
            $resizeheight_tag = true; 
        } 
 
        if($resizewidth_tag && $resizeheight_tag)   //如果新图片的宽度和高度都比原图小 
        { 
            if($widthratio<$heightratio)        //那个比较小就说明它的长度要长,就取哪条,以长边为准缩放保证图片不被压缩 
                $ratio = $widthratio; 
            else 
                $ratio = $heightratio; 
        } 
 
        if($resizewidth_tag && !$resizeheight_tag) 
            $ratio = $widthratio; 
        if($resizeheight_tag && !$resizewidth_tag) 
            $ratio = $heightratio; 
 
        $newwidth = $pic_width * $ratio;            //原图的宽度*要缩放的比例 
        $newheight = $pic_height * $ratio;          //原图高度*要缩放的比例 
         
        if(function_exists("imagecopyresampled")) 
        { 
            $newim = imagecreatetruecolor($newwidth,$newheight);    //生成一张要生成的黑色背景图 ,比例为计算出来的新图片比例 
            imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);  //复制按比例缩放的原图到 ,新的黑色背景中。 
        } 
        else 
        { 
            $newim = imagecreate($newwidth,$newheight); 
            imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); 
        } 
 
        $name = $name.$filetype; 
        imagejpeg($newim,$name); 
        imagedestroy($newim); 
    } 
    else 
    { 
        $name = $name.$filetype; 
        imagejpeg($im,$name); 
    }         
?> 

 

特别说明

  GD库1.6.2版以前支持GIF格式,但因GIF格式使用LZW演算法牵涉专利权,因此在GD1.6.2版之后不支持GIF的格式。如果你是 WINDOWS的环境,你只要进入PHP.INI文件找到extension=php_gd2.dll,将#去除,重启APACHE即可,如果你是 Linux环境,又想支持GIF,PNG,JPEG,你需要去下载libpngzlib,以及freetype字体并安装。

  OK,PHP图片压缩函数完成,最后我们概述一下整个处理的思路:

  通过计算实际图片的长宽与规定生成图片的长宽之间的缩放比例,根据实际的需求(按照宽度还是按照高度进行图片缩放)计算出最终生成图片的大小,然后应用PHP图片处理函数对图片进行处理,最后输出图片。

(责任编辑:ken)
TAG标签: php 扩展
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容