gemliu 发表于 2015-07-02 09:52

PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类

PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类。
使用foreach 循环处理的时候,需要 sleep 设定一个时间 或者 按照处理后的返回值 ,否则处理不完。

代码//文件名:image_process.class.php
<?php
class Image_process{
    public $source;//原图
    public $source_width;//宽
    public $source_height;//高
    public $source_type_id;
    public $orign_name;
    public $orign_dirname;
    //传入图片路径
    public function __construct($source){
      $this->typeList      = array(1=>'gif',2=>'jpg',3=>'png');
      $ginfo               = getimagesize($source);
      $this->source_width= $ginfo;
      $this->source_height = $ginfo;
      $this->source_type_id= $ginfo;
      $this->orign_url   = $source;
      $this->orign_name    = basename($source);
      $this->orign_dirname = dirname($source);
    }

    //判断并处理,返回PHP可识别编码
    public function judgeType($type,$source){
      if($type==1){
            return ImageCreateFromGIF($source);//gif
      }else if($type==2){
            return ImageCreateFromJPEG($source);//jpg
      }else if($type==3){
            return ImageCreateFromPNG($source);//png
      }else{
            return false;
      }
    }

    //生成水印图
    public function watermarkImage($logo){
      $linfo      = getimagesize($logo);
      $logo_width   = $linfo;
      $logo_height= $linfo;
      $logo_type_id = $linfo;
      $sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url);
      $logoHandle   = $this->judgeType($logo_type_id,$logo);

      if( !$sourceHandle || ! $logoHandle ){
            return false;
      }
      $x = $this->source_width - $logo_width;
      $y = $this->source_height- $logo_height;

      ImageCopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_width) or die("fail to combine");
      $newPic = $this->orign_dirname .'\water_'. time().'.'. $this->typeList[$this->source_type_id];

      if( $this->saveImage($sourceHandle,$newPic)){
            imagedestroy($sourceHandle);
            imagedestroy($logoHandle);
      }
    }

    // fix 宽度
    // height = true 固顶高度
    // width= true 固顶宽度
    public function fixSizeImage($width,$height){
      if( $width > $this->source_width) $this->source_width;
      if( $height > $this->source_height ) $this->source_height;
      if( $width === false){
            $width = floor($this->source_width / ($this->source_height / $height));
      }
      if( $height === false){
            $height = floor($this->source_height / ($this->source_width / $width));
      }
      $this->tinyImage($width,$height);
    }

    //比例缩放
    // $scale 缩放比例
    public function scaleImage($scale){
      $width= floor($this->source_width * $scale);
      $height = floor($this->source_height * $scale);
      $this->tinyImage($width,$height);
    }

    //创建略缩图
    private function tinyImage($width,$height){
      $tinyImage = imagecreatetruecolor($width, $height );
      $handle    = $this->judgeType($this->source_type_id,$this->orign_url);
      if(function_exists('imagecopyresampled')){
            imagecopyresampled($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
      }else{
            imagecopyresized($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
      }

      $newPic = time().'_'.$width.'_'.$height.'.'. $this->typeList[$this->source_type_id];
      $newPic = $this->orign_dirname .'\thumb_'. $newPic;
      if( $this->saveImage($tinyImage,$newPic)){
            imagedestroy($tinyImage);
            imagedestroy($handle);
      }
    }

    //保存图片
    private function saveImage($image,$url){
      if(ImageJpeg($image,$url)){
            return true;
      }
    }
}代码//使用
<?php

include('image_process.class.php');
$m = array(
    'D:\myspace\test\image_process\1.jpg',
    'D:\myspace\test\image_process\2.jpg',
    'D:\myspace\test\image_process\3.jpg',
    'D:\myspace\test\image_process\4.jpg'
);

$img= 'D:\myspace\test\image_process\1.jpg';
$logo = 'D:\myspace\test\image_process\logo.png';
foreach( $m as $item){
    $s = new Image_process( $item );
    $s->watermarkImage($logo);
    $s->scaleImage(0.8);
    $s->fixSizeImage(200,false);
    sleep(1);
}

renxiao2003 发表于 2015-07-10 10:11

这个功能确实不错。在图片上传的时候很有用。
页: [1]
查看完整版本: PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类