php 剪切图片类

php 剪切图片类

php 剪切图片类

php 剪切图片类


今天花了很多时间并试验了很多次法终于把php中imagecopyresampled函数搞明白了,特意为此封装了一个resize_image.class.php类来处理需要剪切的图片,与大家共同分享…..

<?php
/**
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 )

$dst_image:新建的图片

$src_image:需要载入的图片

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

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

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

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

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

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

$src_w:原图要载入的宽度

$src_h:原图要载入的高度
*/

/*
 * Created on 2011-5-11
 * author 孤独求学人
 */
class resize_image {
    var $type;//图片的类型
    var $height;//原始图片的高度
    var $width;//原始图片的宽度
    var $resize_height;//剪切后图片的高度
    var $resize_width;//剪切后图片的宽度
    var $iscut;//是否裁图
    var $srcimage;//原始图像
    var $target_dir;//目标图片地址
    var $image;//创建临时图片
    function resize_image($img,$w,$h,$c,$path) {
        $this->srcimage = $img;
        $this->resize_width = $w;
        $this->resize_height = $h;
        $this->iscut = $c;
        //$this->dstimage = $path;
        $this->type = strtolower(substr(strrchr($this->srcimage,"."),1));
        //初始化图像
        $this->initi_img();
        //目标地址
        $this->dir_image($path);
        //获取原图片的高
        $this->height = imagesy($this->image);
        //获取原来图片的宽
        $this->width = imagesx($this->image);
        //生成新图片
        $this->new_image();
        imagedestroy($this->image);
    }
    //创建新图片
    function new_image(){
        //缩小后的比例
        $resize_ratio = ($this->resize_width) /($this->resize_height);//剪切后的图片的宽度/剪切后图片的高度
        //原来图片的比例
        $src_ratio = $this->width / $this->height;//原来图片的宽度/原来图片的高度
        if($this->iscut == '1'){//裁图
            //高度优先
           if($src_ratio >= $resize_ratio){
               //用剪切后的图片的大小新建一个真彩色图像
                 $newImage = imagecreatetruecolor($this->resize_width,$this->resize_height);
                 //重采样拷贝部分图像并调整大小
                 //imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
              imagecopyresampled($newImage, $this->image, 0, 0, ($this->width - ($resize_ratio*$this->height))/2,0, ($this->resize_height*$this->width)/$this->height,$this->resize_height, $this->width, $this->height);
                ImageJpeg ($newImage,$this->target_dir);
           }
           //宽度优先
           if($src_ratio < $resize_ratio){
                 //用剪切后的图片的大小新建一个真彩色图像
                $newImage = imagecreatetruecolor($this->resize_width,$this->resize_height);
                //重采样拷贝部分图像并调整大小
                   //imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
                imagecopyresampled($newImage, $this->image, 0, 0,0,($this->height-((1/$resize_ratio)*$this->width))/2,$this->resize_width,(($this->resize_width*$this->height)/$this->width), $this->width, $this->height);
                ImageJpeg ($newImage,$this->target_dir);
           }
        }
    }
    //初始化图像
    function initi_img(){
        switch($this->type){
            case 'jpg':
            $this->image = imagecreatefromjpeg($this->srcimage);//从 JPEG 文件或 URL 新建一图像
            break;
            case 'gif':
            $this->image = imagecreatefromgif($this->srcimage);//从 png 文件或 URL 新建一图像
            break;
            case 'png':
            $this->image = imagecreatefrompng($this->srcimage);//从 png 文件或 URL 新建一图像
            break;
            case 'bmp':
            $this->image = imagecreatefromwbmp($this->srcimage);//从 WBMP 文件或 URL 新建一图像
            break;
        }
    }
    //目标地址
    function dir_image($path){
        $this->target_dir = $path;
    }
}
?>

相关文章

php 剪切图片类》有2个想法

  1. 脑袋说道:

    好孩子!
    好好学习,天天向上.
    多研究些.

发表评论

返回顶部