php class Zend_Image const TYPE_JPG jpg const TYPE_GIF gif const TYPE_

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
class Zend_Image
{
const TYPE_JPG = 'jpg';
const TYPE_GIF = 'gif';
const TYPE_PNG = 'png';
public function filenameToMime ($filename)
{
$types = array(
'jpg' => self::TYPE_JPG,
'gif' => self::TYPE_GIF,
'png' => self::TYPE_PNG
);
foreach ($types as $extension => $mime)
{
if (preg_match('/.'.$extension.'$/', $filename))
{
return $mime;
}
}
throw new Zend_Exception('Unknown image type.');
}
/**
* Returns a PHP image resource
*/
public function readImage ($filename, $type = NULL)
{
if ($type === NULL)
{
$type = $this->filenameToMime($filename);
}
switch ($type)
{
case self::TYPE_JPG:
return imagecreatefromjpeg($filename);
break;
case self::TYPE_GIF:
return imagecreatefromgif($filename);
break;
case self::TYPE_PNG:
return imagecreatefrompng($filename);
break;
default:
break;
}
}
/**
* Doesn't return anything
*/
public function writeImage ($image, $type = NULL, $filename = NULL)
{
if ($type === NULL)
{
$type = $this->filenameToMime($filename);
}
switch ($type)
{
case self::TYPE_JPG:
imagejpeg($image, $filename);
break;
case self::TYPE_GIF:
imagegif($image, $filename);
break;
case self::TYPE_PNG:
imagepng($image, $filename);
break;
default:
break;
}
}
public function resize ($image, $width = NULL, $height = NULL, $fit = NULL)
{
$fit = (bool) $fit;
// if no bounding box supplied, then return the original image
if ($width === NULL && $height === NULL)
{
return $image;
}
$origX = $newX = imagesx($image);
$origY = $newY = imagesy($image);
$origR = $origY / $origX;
// if height only was specified
if ($width === NULL && $height !== NULL)
{
if ($origY >= $height || $fit == true)
{
$newY = $height;
$newX = $newY / $origY * $origX;
}
}
// if width only was specified
if ($width !== NULL && $height === NULL)
{
if ($origX >= $width || $fit == true)
{
$newX = $width;
$newY = $newX / $origX * $origY;
}
}
// if width and height specified
if ($width !== NULL && $height !== NULL)
{
// if the image fits and $fit is off, just return the original
// image (since it fits in the bounding box)
if ($origX < $width && $origY < $height && $fit == false)
{
return $image;
}
$newR = $height / $width;
// we now need to work out whether to restrain by width or by height
if ($origR > $newR)
{
$newY = $height;
$newX = $newY / $origY * $origX;
}
else
{
$newX = $width;
$newY = $newX / $origX * $origY;
}
}
// now we know the new image's dimensions
$new = imagecreatetruecolor($newX, $newY);
imagecopyresampled($new, $image, 0, 0, 0, 0, $newX, $newY, $origX, $origY);
return $new;
}
}