Ответов: 41 Просмотров: 9122
|
Ну вот на моем текущем проекте мы используем вот такую библиотеку. Не совсем аналогично, но похоже.
Спойлер (Отобразить)
<?php
class Image {
var $image;
var $image_type;
function load($filename) {
if(is_file($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 );
}
}else {
throw new Exception('Incorrect file.');
}
}
function save($filename, $image_type = false, $compression = 75, $permissions = null) {
if(!$image_type) {
$image_type = $this->image_type;
}
if ($image_type == IMAGETYPE_JPEG) {
imagejpeg ( $this->image, $filename, $compression );
} elseif ($image_type == IMAGETYPE_GIF) {
imagegif ( $this->image, $filename );
} elseif ($image_type == IMAGETYPE_PNG) {
imagealphablending($this->image , false);
imagesavealpha($this->image , true);
imagepng ( $this->image, $filename );
}
if ($permissions != null) {
chmod ( $filename, $permissions );
}
}
function output($image_type = false) {
if(!$image_type) {
$image_type = $this->image_type;
}
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 intelligentResize($width, $height){
$aspectRatio = $width/$height;
$aspectRatioImg = $this->getWidth()/$this->getHeight();
if($aspectRatioImg > $aspectRatio){
$this->resizeToWidth($width);
}else{
$this->resizeToHeight($height);
}
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight ();
$width = $this->getWidth () * $ratio;
$this->resize ( $width, $height );
}
function resizeToWidth($width) {
$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) {
$width = round($width);
$height = round($height);
$new_image = imagecreatetruecolor ( $width, $height );
if ($this->image_type == IMAGETYPE_PNG) {
imagealphablending($new_image , false);
imagesavealpha($new_image , true);
}
imagecopyresampled ( $new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth (), $this->getHeight () );
$this->image = $new_image;
}
}
?>
Ну и, если использовать Zend Framework, можно воспользоваться следующим решением: http://www.pamparam.net/post/resize-zend-framework. |