文档章节

图片处理类待纠正

摇滚哈哈狗
 摇滚哈哈狗
发布于 2014/09/29 12:25
字数 1003
阅读 80
收藏 0
<?php
/**
 * Image.class.php 图像处理类
 * @author Administrator
 *
 */
class Image{
    
    private $path='';
    /**
     * 构造方法
     * @param unknown $path
     */
    function __construct($path=''){
        if (!empty($path)) {
            $this->path=$path;
        }
    }
    /**
     +-----------------------------------------------
     * 等比缩放函数
     +----------------------------------------------- 
     * @param unknown $name  需处理图片的名称
     * @param unknown $width  缩放后的宽度
     * @param unknown $height 缩放后的高度
     * @param string $thumb_prixs 缩放后的前缀名
     * @return mixed $newname  返回的缩放后的文件名 
     */
    function thumb($name,$width,$height,$thumb_prixs='th_'){
        //获取图片信息
        $Info=$this->ImageInfo($name); //图片的宽度,高度,类型
        //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png
        $imagres=$this->Img_resouce($name, $Info);
        //获取计算图片等比例之后的大小,
        $size=$this->getNewSize($name,$width,$height,$Info);
        //获取新的图片资源,处理透明背景
        $newimg=$this->getImage($imagres,$size,$Info);
        //另存为一个新的图片,返回新的缩放后的图片名称
        $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info);
        return $newname; 
    }
    
    /**
     +-----------------------------------------------------------------------
     * 水印标记函数
     +----------------------------------------------------------------------- 
     * @param unknown $backname   背景文件名
     * @param unknown $watername  水印文件名
     * @param number $waterpos    水印位置
     * @param string $wa_prixs    水印前缀名
     * @return boolean
     */
    function waterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_') {
        
        if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) {
            
            $backinfo=$this->ImageInfo($backname);
            
            $waterinfo=$this->ImageInfo($watername);
            
            if(!$pos=$this->getPos($backinfo, $waterinfo, $waterpos)){
                echo "水印图片不应该比背景图片小";
                return false;
            }
              $backimg=$this->Img_resouce($backname, $backinfo);
              
              $waterimg=$this->Img_resouce($watername, $waterinfo);
              var_dump($backimg);exit();
              $backimg=$this->CopyImage($backimg, $waterimg, $pos, $waterinfo);
              
              $this->SaveNewImage($backimg, $wa_prixs.$backname, $backinfo);
        }else{
            
            echo "图片或水印不存在";
            return false;
        }
    }
    /**
     +----------------------------------------------------------------------- 
     * 获取图片信息函数
     +----------------------------------------------------------------------- 
     * @param unknown $name
     * @return unknown
     */
    
     private function ImageInfo($img) {
        $imageInfo=getimagesize($img);
        if ($imageInfo!==false) {
            $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1));
            $imageSize=filesize($img);
            $Info=array(
                "width" => $imageInfo[0],
                "height" => $imageInfo[1],
                "type" => $imageType,
                "size" => $imageSize,
                "mime" => $imageInfo['mime']
            );
            return $Info;
        }else{
            return false;
        }    
    }
    
    
    /**
     +--------------------------------------------------------
     * 创建原图像格式函数
     +--------------------------------------------------------
     * @param unknown $name
     * @param unknown $imaginfo
     * @return boolean|resource
     */
    private function Img_resouce($name,$imageinfo){
        $iamgeres=$this->path.$name;
        //var_dump($iamgeres);exit();
         switch ($imageinfo['type']) {
             case 'gif':
               $img=imagecreatefromgif($name);
                   break;
             case 'jpg':
               $img=imagecreatefromjpeg($name);
                   break;
             case 'png':
               $img=imagecreatefrompng($name);
                   break;                           
         }
         return $img;
    }
    /**
     +-------------------------------------------------- 
     * 获取等比缩放尺寸函数
     +-------------------------------------------------- 
     * @param unknown $name
     * @param unknown $width
     * @param unknown $height
     * @param unknown $imaginfo
     * @return Ambigous <unknown, number>
     */
    private function getNewSize($name,$width,$height,$imaginfo){
             $size['width']=$imaginfo['width'];
             $size['height']=$imaginfo['height'];
        if ($width<$imaginfo['width']) {
            $size['width']=$width;
        }
        if ($height<$imaginfo['height']) {
            $size['height']=$height;
        }
        //图像等比例缩放算法
        if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) {
            $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']);
        }else{
            $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']);
        }
        return  $size;  
    }
    private function getImage($imageres,$size,$imageinfo){
        //新建一个真彩色图像
        $newimg=imagecreatetruecolor($size['width'], $size['height']);
        //将某个颜色定义为透明色
        $otsc=imagecolortransparent($imageres);
        //获取图像的调色板的颜色数目
        if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) {
            //取得某索引的颜色
            $stran=imagecolorsforindex($imageres, $otsc);
            //为图像分配颜色
            $newt=imagecolorallocate($imageres, $stran['red'], $stran['green'], $stran['blue']);
            //区域填充函数
            imagefill($newimg, 0, 0, $newt);
            //为图像定义透明色
            imagecolortransparent($newimg,$newt);        
        }
   
     imagecopyresized($newimg, $imageres, 0, 0, 0, 0, $size['width'], 
$size['height'], $imageinfo['width'], $imageinfo['height']);    
        
        imagedestroy($imageres);
        
        return $newimg; 
      }
      /**
       +---------------------------------------------- 
       *保存图像函数 
       +----------------------------------------------
       * @param unknown $newimg
       * @param unknown $newname
       * @param unknown $imageinfo
       * @return unknown  
       */
      private function SaveNewImage($newimg,$newname,$imageinfo){
          switch ($imageinfo['type']){
              case 1://gif
                  $result=imagegif($newimg,$this->path.$newname);
                  break;
              case 2://jpg
                  $result=imagejpeg($newimg,$this->path.$newname);
                  break;
              case 3://png
                  $result=imagepng($newimg,$this->path.$newname);
                  break;
          }
          imagedestroy($newimg);
          return $newname;
      }
      
      /**
       +-----------------------------------------------------------------
       * 获取水印位置函数
       +----------------------------------------------------------------- 
       * @param unknown $backinfo    背景信息
       * @param unknown $waterinfo   水印信息
       * @param unknown $waterpos    水印位置
       * @return boolean|multitype:number  返回坐标数组
       */
      private function getPos($backinfo,$waterinfo,$waterpos) {
          
          if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) {
              return false;
          }
          switch ($waterpos) {
              
              case 1://左上角
                 $posX=0;
                 $posY=0;
                    break;
              case 2://中上方
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=0;
                    break;
              case 3://右上角
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=0;
                    break;
              case 4://左中方
                  $posX=0;
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 5://正中间
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 6://右中方
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 7://底部靠左
                  $posX=0;
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 8://底部居中
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 9://底部靠右
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 0:
              default :
                  $posX=rand(0,$backinfo['width']-$waterinfo['width']);
                  $posY=rand(0,$backinfo['height']-$waterinfo['height']);
                    break;
          }
          return array('posX'=>$posX,'posY'=>$posY);
      }
      /**
       +------------------------------------------------------------------- 
       * 拷贝图像
       +-------------------------------------------------------------------
       * @param unknown $backimg     背景资源
       * @param unknown $waterimg    水印资源
       * @param unknown $pos         水印位置
       * @param unknown $waterinfo   水印信息
       * @return unknown
       */
      private function CopyImage($backimg,$waterimg,$pos,$waterinfo) {
           
          imagecopy($backimg, $waterimg, $pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']);
          imagedestroy($waterimg);          
           return $backimg;
      }
        
}
?>


© 著作权归作者所有

上一篇: php文件上传类
下一篇: jquery tabs 插件
摇滚哈哈狗
粉丝 13
博文 226
码字总数 28445
作品 0
深圳
程序员
私信 提问
H5 和小程序拍照图片旋转、压缩和上传

原文地址:github.com/whinc/blog/… 最近接到一个“发表评论”的需求:用户输入评论并且可以拍照或从相册选择图片上传,即支持图文评论。需要同时在 H5 和小程序两端实现,该需求处理图片的...

whinc
2018/09/29
0
0
UIImage分类大全

在处理照片的时候,最多的情况就是对UIImage进行处理。虽然UIImage使用起来比较简单,但是我们在需要处理各种繁杂需求的时候,UIImage不是都提供了相关效果的实现。很多时候需要我们自己来实...

秦明Qinmin
2017/10/10
0
0
《HTML+CSS3权威指南》笔记摘要 - 目录

主要是想借助这个平台让大家给我学习途中的错误和不好的地方给与纠正。 我会努力最短时间内完成更新,如果发现有错别字或者Code错误,请指出。 信息:建议使用Opera10以上或者Google浏览器测...

产品哥
2011/12/02
0
1
我的第一个独立完成的小项目(非框架,仅是面向过程的一次小项目)

第一次尝试独立完成一个排号系统的东西,并交付使用。源码可以开放学习,因为有很多的不足,希望大家多加纠正和交流。因为属于交付产品,因此请尽量不要商业用途,自由更新使用没有问题(估计...

林伟盛
2016/01/16
174
0
纯前端实现人脸识别-提取-合成

最近火爆朋友圈的军装照H5大家一定还记忆犹新,其原理是先提取出照片中的面部,然后与模板进行合成,官方的合成处理据说由天天P图提供技术支持,后端合成后返回给前端展示,形式很新颖效果也...

技术小能手
2018/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部