zoukankan      html  css  js  c++  java
  • php处理图片实现

     1     <?php
     2 include("SimpleImage.php");//图片处理类在下面
     3 
     4 
     5 
     6 $url="http://f3.v.veimg.cn/meadincms/1/2013/0703/20130703100937552.jpg";
     7 $picfile = down($url);//下载图片(下载图片的路径可以处理完成后清空,这里未进行处理)
     8 $res = new SimpleImage();//图片处理实例
     9 $res = $res->load($picfile);
    10 $tmpfile = tempfile().'.jpg';//创建一个路径文件用来保存图片
    11 $width = '30';//设定图片的宽度
    12 $res->resizeToWidth($width);
    13 $res->save($tmpfile);//把处理后的图片保存(无.jpg后缀)
    14 //这里总共产生了3个文件,一个是图片下载的文件,一个是临时文件,最后一个是处理的图片文件。需要优化清理掉前两个文件。
    15 
    16 
    17 
    18 
    19 function down($url)
    20 {
    21         $http = array();
    22         $header = "http://f3.v.veimg.cn";
    23         if ($header) {
    24             $http['header'] = $header;
    25         }
    26 
    27         $http['timeout'] = 50;
    28 
    29         $ctx = stream_context_create(array(
    30             'http' => $http,
    31         )); 
    32         $content = @file_get_contents($url, 0, $ctx);
    33         sleep(1);
    34 
    35         if (!$content) {
    36             return false;
    37         }
    38 
    39         $tmpfile = tempfile();
    40 
    41         file_put_contents($tmpfile, $content);
    42 
    43         return $tmpfile;
    44 }
    45 
    46 function tempfile()
    47 {
    48         $path = dirname(__FILE__);
    49         $path .= '/spider/' . date('Ymd') . '/'.date('His').'-' . (int)(time() / 300);
    50 
    51         if (!file_exists($path)) {
    52             mkdir($path, 0777, true);
    53         }
    54 
    55         do {
    56             $file = $path . '/' . dechex(mt_rand());
    57         }
    58         while (file_exists($file));
    59 
    60         touch($file);
    61 
    62         return $file;
    63 }

    图片处理类:

    <?php
     
    /*
    * File: SimpleImage.php
    * Author: Simon Jarvis
    * Copyright: 2006 Simon Jarvis
    * Date: 08/11/06
    * Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
    *
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details:
    * http://www.gnu.org/licenses/gpl.html
    *
    */
     
    class SimpleImage {
    
    	var $image;
    	var $image_type;
    
    	function load($filename) {
    
    		$image_info = getimagesize($filename);
    		$this->image_type = $image_info[2];
    		if( $this->image_type == IMAGETYPE_JPEG ) {
    
    			$this->image = @imagecreatefromjpeg($filename);
    		} elseif( $this->image_type == IMAGETYPE_GIF ) {
    
    			$this->image = @imagecreatefromgif($filename);
    		} elseif( $this->image_type == IMAGETYPE_PNG ) {
    
    			$this->image = @imagecreatefrompng($filename);
    		}
    
    		if (!$this->image) {
    			return false;
    		}
    
    		return $this;
    	}
    
    	function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
    
    		if( $image_type == IMAGETYPE_JPEG ) {
    			imagejpeg($this->image,$filename,$compression);
    		} elseif( $image_type == IMAGETYPE_GIF ) {
    
    			imagegif($this->image,$filename);
    		} elseif( $image_type == IMAGETYPE_PNG ) {
    
    			imagepng($this->image,$filename);
    		}
    		if( $permissions != null) {
    
    			chmod($filename,$permissions);
    		}
    	}
    	function output($image_type=IMAGETYPE_JPEG) {
    
    		if( $image_type == IMAGETYPE_JPEG ) {
    			imagejpeg($this->image);
    		} elseif( $image_type == IMAGETYPE_GIF ) {
    
    			imagegif($this->image);
    		} elseif( $image_type == IMAGETYPE_PNG ) {
    
    			imagepng($this->image);
    		}
    	}
    	function getWidth() {
    
    		return imagesx($this->image);
    	}
    	function getHeight() {
    
    		return imagesy($this->image);
    	}
    	function resizeToHeight($height) {
    
    		$ratio = $height / $this->getHeight();
    		$width = $this->getWidth() * $ratio;
    		$this->resize($width,$height);
    	}
    
    	function resizeToWidth($width) {
    		if ($this->getWidth() < $width) {
    			$width = $this->getWidth();
    		}
    		$ratio = $width / $this->getWidth();
    		$height = $this->getheight() * $ratio;
    		$this->resize($width,$height);
    	}
    
    	function scale($scale) {
    		$width = $this->getWidth() * $scale/100;
    		$height = $this->getheight() * $scale/100;
    		$this->resize($width,$height);
    	}
    
    	function resize($width,$height) {
    		$new_image = imagecreatetruecolor($width, $height);
    		imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
    		$this->image = $new_image;
    	}
    
    
    	function resize2($width,$height) {
    		$new_image = imagecreatetruecolor($width, $height);
    		if( $this->image_type == IMAGETYPE_GIF || $this->image_type == IMAGETYPE_PNG ) {
    			$current_transparent = imagecolortransparent($this->image);
    			if($current_transparent != -1) {
    				$transparent_color = imagecolorsforindex($this->image, $current_transparent);
    				$current_transparent = imagecolorallocate($new_image, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
    				imagefill($new_image, 0, 0, $current_transparent);
    				imagecolortransparent($new_image, $current_transparent);
    			} elseif( $this->image_type == IMAGETYPE_PNG) {
    				imagealphablending($new_image, false);
    				$color = imagecolorallocatealpha($new_image, 0, 0, 0, 127);
    				imagefill($new_image, 0, 0, $color);
    				imagesavealpha($new_image, true);
    			}
    		}
    		imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
    		$this->image = $new_image;	
    	}
    
    }
    
  • 相关阅读:
    English in 999
    面向对象程序设计
    HOOK相关
    很幽默的讲解六种Socket IO模型(转)(Delphi版本)[转]
    P2P之UDP穿透NAT原理并有UDP打洞的源码[转]
    分批导出数据库记录
    DELPHI Winsock完成端口[转]
    由数据库排序差异引起的错误一例总结
    适配器模式
    JQuery+Asp.net+Webservice组成的Autocomplete示例
  • 原文地址:https://www.cnblogs.com/jami918/p/3654815.html
Copyright © 2011-2022 走看看