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;	
    	}
    
    }
    
  • 相关阅读:
    深入Android 【一】 —— 序及开篇
    Android中ContentProvider和ContentResolver使用入门
    深入Android 【六】 —— 界面构造
    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
    Dynamic Business代码片段总结
    对文件的BuildAction以content,resource两种方式的读取
    paraview 3.12.0 windows下编译成功 小记
    百度网盘PanDownload使用Aria2满速下载
    netdata的安装与使用
    用PS给证件照排版教程
  • 原文地址:https://www.cnblogs.com/jami918/p/3654815.html
Copyright © 2011-2022 走看看