?? gd.php
字號:
<?php
/***********************************************************************
** Title.........: GD Driver
** Version.......: 1.0
** Author........: Xiang Wei ZHUO <wei@zhuo.org>
** Filename......: GD.php
** Last changed..: 30 Aug 2003
** Notes.........: Orginal is from PEAR
**/
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2002 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Peter Bowyer <peter@mapledesign.co.uk> |
// | Alan Knowles <alan@akbkhome.com> |
// +----------------------------------------------------------------------+
//
// Usage :
// $img = new Image_Transform_GD();
// $angle = -78;
// $img->load('magick.png');
//
// if($img->rotate($angle,array('autoresize'=>true,'color_mask'=>array(255,0,0)))){
// $img->addText(array('text'=>"Rotation $angle",'x'=>0,'y'=>100,'font'=>'/usr/share/fonts/default/TrueType/cogb____.ttf'));
// $img->display();
// } else {
// echo "Error";
// }
//
//
// $Id: GD.php,v 1.1 2004/11/29 09:44:36 mschering Exp $
//
// Image Transformation interface using the GD library
//
require_once "Transform.php";
Class Image_Transform_Driver_GD extends Image_Transform
{
/**
* Holds the image file for manipulation
*/
var $imageHandle = '';
/**
* Holds the original image file
*/
var $old_image = '';
/**
* Check settings
*
* @return mixed true or or a PEAR error object on error
*
* @see PEAR::isError()
*/
function Image_Transform_GD()
{
return;
} // End function Image
/**
* Load image
*
* @param string filename
*
* @return mixed none or a PEAR error object on error
* @see PEAR::isError()
*/
function load($image)
{
$this->uid = md5($_SERVER['REMOTE_ADDR']);
$this->image = $image;
$this->_get_image_details($image);
$functionName = 'ImageCreateFrom' . $this->type;
if(function_exists($functionName))
{
$this->imageHandle = $functionName($this->image);
}
} // End load
/**
* addText
*
* @param array options Array contains options
* array(
* 'text' The string to draw
* 'x' Horizontal position
* 'y' Vertical Position
* 'Color' Font color
* 'font' Font to be used
* 'size' Size of the fonts in pixel
* 'resize_first' Tell if the image has to be resized
* before drawing the text
* )
*
* @return none
* @see PEAR::isError()
*/
function addText($params)
{
$default_params = array(
'text' => 'This is Text',
'x' => 10,
'y' => 20,
'color' => array(255,0,0),
'font' => 'Arial.ttf',
'size' => '12',
'angle' => 0,
'resize_first' => false // Carry out the scaling of the image before annotation? Not used for GD
);
$params = array_merge($default_params, $params);
extract($params);
if( !is_array($color) ){
if ($color[0]=='#'){
$this->colorhex2colorarray( $color );
} else {
include_once('Image/Transform/Driver/ColorsDefs.php');
$color = isset($colornames[$color])?$colornames[$color]:false;
}
}
$c = imagecolorresolve ($this->imageHandle, $color[0], $color[1], $color[2]);
if ('ttf' == substr($font, -3)) {
ImageTTFText($this->imageHandle, $size, $angle, $x, $y, $c, $font, $text);
} else {
ImagePSText($this->imageHandle, $size, $angle, $x, $y, $c, $font, $text);
}
return true;
} // End addText
/**
* Rotate image by the given angle
* Uses a fast rotation algorythm for custom angles
* or lines copy for multiple of 90 degrees
*
* @param int $angle Rotation angle
* @param array $options array( 'autoresize'=>true|false,
* 'color_mask'=>array(r,g,b), named color or #rrggbb
* )
* @author Pierre-Alain Joye
* @return mixed none or a PEAR error object on error
* @see PEAR::isError()
*/
function rotate($angle, $options=null)
{
if(function_exists('imagerotate')) {
$white = imagecolorallocate ($this->imageHandle, 255, 255, 255);
$this->imageHandle = imagerotate($this->imageHandle, $angle, $white);
return true;
}
if ( $options==null ){
$autoresize = true;
$color_mask = array(255,255,0);
} else {
extract( $options );
}
while ($angle <= -45) {
$angle += 360;
}
while ($angle > 270) {
$angle -= 360;
}
$t = deg2rad($angle);
if( !is_array($color_mask) ){
if ($color[0]=='#'){
$this->colorhex2colorarray( $color_mask );
} else {
include_once('Image/Transform/Driver/ColorDefs.php');
$color = isset($colornames[$color_mask])?$colornames[$color_mask]:false;
}
}
// Do not round it, too much lost of quality
$cosT = cos($t);
$sinT = sin($t);
$img =& $this->imageHandle;
$width = $max_x = $this->img_x;
$height = $max_y = $this->img_y;
$min_y = 0;
$min_x = 0;
$x1 = round($max_x/2,0);
$y1 = round($max_y/2,0);
if ( $autoresize ){
$t = abs($t);
$a = round($angle,0);
switch((int)($angle)){
case 0:
$width2 = $width;
$height2 = $height;
break;
case 90:
$width2 = $height;
$height2 = $width;
break;
case 180:
$width2 = $width;
$height2 = $height;
break;
case 270:
$width2 = $height;
$height2 = $width;
break;
default:
$width2 = (int)(abs(sin($t) * $height + cos($t) * $width));
$height2 = (int)(abs(cos($t) * $height+sin($t) * $width));
}
$width2 -= $width2%2;
$height2 -= $height2%2;
$d_width = abs($width - $width2);
$d_height = abs($height - $height2);
$x_offset = $d_width/2;
$y_offset = $d_height/2;
$min_x2 = -abs($x_offset);
$min_y2 = -abs($y_offset);
$max_x2 = $width2;
$max_y2 = $height2;
}
$img2 = @imagecreate($width2,$height2);
if ( !is_resource($img2) ){
return false;/*PEAR::raiseError('Cannot create buffer for the rotataion.',
null, PEAR_ERROR_TRIGGER, E_USER_NOTICE);*/
}
$this->img_x = $width2;
$this->img_y = $height2;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -