• 技术文章 >后端开发 >php教程

    php 图片处理类_PHP教程

    2016-07-13 17:49:02原创324
    class Image {
    private $path;
    //构造方法用来对图片所在位置进行初使化
    function __construct($path="./"){
    $this->path=rtrim($path, "//m.sbmmt.com/m/")."//m.sbmmt.com/m/";
    }
    /* 对图片进行缩放
    *
    * 参数$name: 是需要处理的图片名称
    * 参数$width:是缩放后的宽度
    * 参数$height:是缩放后的高度
    * 参数$qz: 是新图片的名称前缀
    * 返回值:就是缩放后的图片名称,失败则返回false
    *
    */
    function thumb($name, $width, $height, $qz="th_"){
    //获取图片信息
    $imgInfo=$this->getInfo($name); //图片的宽度,高度,类型
    //获取图片资源, 各种类型的图片都可以创建资源 jpg, gif, png
    $srcImg=$this->getImg($name, $imgInfo);
    //获取计算图片等比例之后的大小, $size["width"], $size["height"]
    $size=$this->getNewSize($name, $width, $height, $imgInfo);
    //获取新的图片资源, 处理一下gif透明背景
    $newImg=$this->kidOfImage($srcImg, $size, $imgInfo);
    //另存为一个新的图片,返回新的缩放后的图片名称
    return $this->createNewImage($newImg, $qz.$name, $imgInfo);
    }

    private function createNewImage($newImg, $newName, $imgInfo){
    switch($imgInfo["type"]){
    case 1://gif
    $result=imageGif($newImg, $this->path.$newName);
    break;
    case 2://jpg
    $result=imageJPEG($newImg, $this->path.$newName);
    break;
    case 3://png
    $return=imagepng($newImg, $this->path.$newName);
    break;
    }
    imagedestroy($newImg);
    return $newName;
    }

    private function kidOfImage($srcImg, $size, $imgInfo){
    $newImg=imagecreatetruecolor($size["width"], $size["height"]);

    $otsc=imagecolortransparent($srcImg);

    if($otsc >=0 && $otsc <= imagecolorstotal($srcImg)){
    $tran=imagecolorsforindex($srcImg, $otsc);

    $newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]);

    imagefill($newImg, 0, 0, $newt);

    imagecolortransparent($newImg, $newt);
    }

    imagecopyresized($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]);

    imagedestroy($srcImg);

    return $newImg;
    }

    private function getNewSize($name, $width, $height, $imgInfo){
    $size["width"]=$imgInfo["width"];
    $size["height"]=$imgInfo["height"];

    //缩放的宽度如果比原图小才重新设置宽度
    if($width < $imgInfo["width"]){
    $size["width"]=$width;
    }
    //缩放的高度如果比原图小才重新设置高度
    if($height < $imgInfo["height"]){
    $size["height"]=$height;
    }

    //图片等比例缩放的算法
    if($imgInfo["width"]*$size["width"] > $imgInfo["height"] * $size["height"]){
    $size["height"]=round($imgInfo["height"]*$size["width"]/$imgInfo["width"]);
    }else{
    $size["width"]=round($imgInfo["width"]*$size["height"]/$imgInfo["height"]);
    }


    return $size;

    }

    private function getInfo($name){
    $data=getImageSize($this->path.$name);

    $imageInfo["width"]=$data[0];
    $imageInfo["height"]=$data[1];
    $imageInfo["type"]=$data[2];

    return $imageInfo;
    }

    private function getImg($name, $imgInfo){
    $srcPic=$this->path.$name;

    switch($imgInfo["type"]){
    case 1: //gif
    $img=imagecreatefromgif($srcPic);
    break;
    case 2: //jpg
    $img=imageCreatefromjpeg($srcPic);
    break;
    case 3: //png
    $img=imageCreatefrompng($srcPic);
    break;
    default:
    return false;

    }

    return $img;
    }
    /* 功能:为图片加水印图片
    * 参数$groundName: 背景图片,即需要加水印的图片
    * 参数$waterName: 水钱图片
    * 参数#aterPost:水印位置, 10种状态,
    * 0为随机位置
    *
    * 1. 为顶端居左 2. 为顶端居中 3 为顶端居右
    * 4 为中部居左 5. 为中部居中 6 为中部居右
    * 7 . 为底端居左 8. 为底端居中, 9. 为底端居右
    *
    * 参数$qz : 是加水印后的图片名称前缀
    * 返回值:就是处理后图片的名称
    *
    */
    function waterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){

    if(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){
    $groundInfo=$this->getInfo($groundName);
    $waterInfo=$this->getInfo($waterName);
    //水印的位置
    if(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){
    echo "水印不应该比背景图片小!";
    return;
    }

    $groundImg=$this->getImg($groundName, $groundInfo);
    $waterImg=$this->getImg($waterName, $waterInfo);

    $groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo);

    return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo);
    }else{
    echo "图片或水印图片不存在";
    return false;
    }
    }

    private function copyImage($groundImg, $waterImg, $pos, $waterInfo){
    imagecopy($groundImg, $waterImg, $pos["posX"], $pos["posY"], 0, 0, $waterInfo["width"], $waterInfo["height"]);
    imagedestroy($waterImg);

    return $groundImg;
    }

    private function position($groundInfo, $waterInfo, $waterPos){
    //需要背景比水印图片大
    if(($groundInfo["width"]< $waterInfo["width"]) ||($groundInfo["height"] < $waterInfo["height"])){
    return false;
    }

    switch($waterPos){
    case 1:
    $posX=0;
    $posY=0;
    break;
    case 2:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=0;
    break;
    case 3:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=0;
    break;
    case 4:
    $posX=0;
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 5:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 6:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 7:
    $posX=0;
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 8:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 9:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 0:
    default:
    $posX=rand(0, ($groundInfo["width"]-$waterInfo["width"]));
    $posY=rand(0, ($groundInfo["height"]-$waterInfo["height"]));
    break;
    }

    return array("posX"=>$posX, "posY"=>$posY);
    }

    }
    class Image {
    private $path;
    //构造方法用来对图片所在位置进行初使化
    function __construct($path="./"){
    $this->path=rtrim($path, "//m.sbmmt.com/m/")."//m.sbmmt.com/m/";
    }
    /* 对图片进行缩放
    *
    * 参数$name: 是需要处理的图片名称
    * 参数$width:是缩放后的宽度
    * 参数$height:是缩放后的高度
    * 参数$qz: 是新图片的名称前缀
    * 返回值:就是缩放后的图片名称,失败则返回false
    *
    */
    function thumb($name, $width, $height, $qz="th_"){
    //获取图片信息
    $imgInfo=$this->getInfo($name); //图片的宽度,高度,类型
    //获取图片资源, 各种类型的图片都可以创建资源 jpg, gif, png
    $srcImg=$this->getImg($name, $imgInfo);
    //获取计算图片等比例之后的大小, $size["width"], $size["height"]
    $size=$this->getNewSize($name, $width, $height, $imgInfo);
    //获取新的图片资源, 处理一下gif透明背景
    $newImg=$this->kidOfImage($srcImg, $size, $imgInfo);
    //另存为一个新的图片,返回新的缩放后的图片名称
    return $this->createNewImage($newImg, $qz.$name, $imgInfo);
    }

    private function createNewImage($newImg, $newName, $imgInfo){
    switch($imgInfo["type"]){
    case 1://gif
    $result=imageGif($newImg, $this->path.$newName);
    break;
    case 2://jpg
    $result=imageJPEG($newImg, $this->path.$newName);
    break;
    case 3://png
    $return=imagepng($newImg, $this->path.$newName);
    break;
    }
    imagedestroy($newImg);
    return $newName;
    }

    private function kidOfImage($srcImg, $size, $imgInfo){
    $newImg=imagecreatetruecolor($size["width"], $size["height"]);

    $otsc=imagecolortransparent($srcImg);

    if($otsc >=0 && $otsc <= imagecolorstotal($srcImg)){
    $tran=imagecolorsforindex($srcImg, $otsc);

    $newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]);

    imagefill($newImg, 0, 0, $newt);

    imagecolortransparent($newImg, $newt);
    }

    imagecopyresized($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]);

    imagedestroy($srcImg);

    return $newImg;
    }

    private function getNewSize($name, $width, $height, $imgInfo){
    $size["width"]=$imgInfo["width"];
    $size["height"]=$imgInfo["height"];

    //缩放的宽度如果比原图小才重新设置宽度
    if($width < $imgInfo["width"]){
    $size["width"]=$width;
    }
    //缩放的高度如果比原图小才重新设置高度
    if($height < $imgInfo["height"]){
    $size["height"]=$height;
    }

    //图片等比例缩放的算法
    if($imgInfo["width"]*$size["width"] > $imgInfo["height"] * $size["height"]){
    $size["height"]=round($imgInfo["height"]*$size["width"]/$imgInfo["width"]);
    }else{
    $size["width"]=round($imgInfo["width"]*$size["height"]/$imgInfo["height"]);
    }


    return $size;

    }

    private function getInfo($name){
    $data=getImageSize($this->path.$name);

    $imageInfo["width"]=$data[0];
    $imageInfo["height"]=$data[1];
    $imageInfo["type"]=$data[2];

    return $imageInfo;
    }

    private function getImg($name, $imgInfo){
    $srcPic=$this->path.$name;

    switch($imgInfo["type"]){
    case 1: //gif
    $img=imagecreatefromgif($srcPic);
    break;
    case 2: //jpg
    $img=imageCreatefromjpeg($srcPic);
    break;
    case 3: //png
    $img=imageCreatefrompng($srcPic);
    break;
    default:
    return false;

    }

    return $img;
    }
    /* 功能:为图片加水印图片
    * 参数$groundName: 背景图片,即需要加水印的图片
    * 参数$waterName: 水钱图片
    * 参数#aterPost:水印位置, 10种状态,
    * 0为随机位置
    *
    * 1. 为顶端居左 2. 为顶端居中 3 为顶端居右
    * 4 为中部居左 5. 为中部居中 6 为中部居右
    * 7 . 为底端居左 8. 为底端居中, 9. 为底端居右
    *
    * 参数$qz : 是加水印后的图片名称前缀
    * 返回值:就是处理后图片的名称
    *
    */
    function waterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){

    if(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){
    $groundInfo=$this->getInfo($groundName);
    $waterInfo=$this->getInfo($waterName);
    //水印的位置
    if(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){
    echo "水印不应该比背景图片小!";
    return;
    }

    $groundImg=$this->getImg($groundName, $groundInfo);
    $waterImg=$this->getImg($waterName, $waterInfo);

    $groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo);

    return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo);
    }else{
    echo "图片或水印图片不存在";
    return false;
    }
    }

    private function copyImage($groundImg, $waterImg, $pos, $waterInfo){
    imagecopy($groundImg, $waterImg, $pos["posX"], $pos["posY"], 0, 0, $waterInfo["width"], $waterInfo["height"]);
    imagedestroy($waterImg);

    return $groundImg;
    }

    private function position($groundInfo, $waterInfo, $waterPos){
    //需要背景比水印图片大
    if(($groundInfo["width"]< $waterInfo["width"]) ||($groundInfo["height"] < $waterInfo["height"])){
    return false;
    }

    switch($waterPos){
    case 1:
    $posX=0;
    $posY=0;
    break;
    case 2:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=0;
    break;
    case 3:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=0;
    break;
    case 4:
    $posX=0;
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 5:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 6:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=($groundInfo["height"]-$waterInfo["height"]) /2;
    break;
    case 7:
    $posX=0;
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 8:
    $posX=($groundInfo["width"]-$waterInfo["width"])/2;
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 9:
    $posX=$groundInfo["width"]-$waterInfo["width"];
    $posY=$groundInfo["height"]-$waterInfo["height"];
    break;
    case 0:
    default:
    $posX=rand(0, ($groundInfo["width"]-$waterInfo["width"]));
    $posY=rand(0, ($groundInfo["height"]-$waterInfo["height"]));
    break;
    }

    return array("posX"=>$posX, "posY"=>$posY);
    }

    }

    摘自 chaojie2009的专栏

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478376.htmlTechArticle?php class Image { private $path; //构造方法用来对图片所在位置进行初使化 function __construct($path=./){ $this-path=rtrim($path, /)./; } /* 对图片进行缩放...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 图片 处理 php class Image private path 构造 方法 用来 图片 所在 位置
    上一篇:php 无限分类(非递归)_PHP教程 下一篇:php 常用函数收藏(一)_PHP教程
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何使用xlswriter进行大数据的导入导出?(详解)• js 弹窗出现乱码了解决方案 • ThinkPHP单字母函数拾掇 • php判断字符以及字符串的包孕方法属性 • opencart内的php基础有关问题$_[' ']
    1/1

    PHP中文网