Screamer,
<?php
/**
* Koeimg
*
* Обработка изображения, возможность изменения размеров пропорционально, задав ширину или длину, не пропорциональное изменение размера указать ширину и длину,
* изменение размера пропорционально в процентном соотношении, зеркальное отражение исходного изображения, получить размеры ширины или высоты изображенияб
* поворот изображение на определенный угол, сделать чб, наложение копирайта на левый верхний или левый нижний углы
*
* @author Koenig <http://johncms.com/users/profile.php?user=6565>
* @version 1.0
*/
class Koeimg
{
/**
* ширина изображения
*
* @var integer
*/
private $width;
/**
* высота изображения
*
* @var integer
*/
private $height;
/**
* тип изображения
*
* @var string
*/
private $type;
/**
* ресурс изображения
*
* @var resource
*/
private $img;
/**
* массив типов
*
* @var array
*/
private $imgtypes = array(
'jpg',
'jpeg',
'gif',
'png'
);
/**
* конструктор
*
* @param string ссылка на файл изображения
* @return resource
*/
public function __construct($imgfile)
{
if (!file_exists($imgfile)) {
throw new Exception('file not exists');
}
$imgtypes = array(
'jpg',
'jpeg',
'gif',
'png'
);
$ext = explode('.', $imgfile);
$ext = end($ext);
if (!in_array($ext, $this->imgtypes)) {
throw new Exception('unsupported image type');
}
$info = getimagesize($imgfile);
$this->width = $info[0];
$this->height = $info[1];
$this->type = $info['mime'];
$this->type = strtolower(substr($this->type, strpos($this->type, '/') + 1));
$imgfunc = 'imagecreatefrom' . $this->type;
if (!function_exists($imgfunc)) {
throw new Exception('unsupported function ' . $imgfunc);
}
$this->img = $imgfunc($imgfile);
$newimg = imagecreatetruecolor($this->width, $this->height);
if ($this->type == 'gif') {
$newimg = imagecreate($this->width, $this->height);
imagecolortransparent($newimg, imagecolorallocate($newimg, 255, 255, 255));
}
if ($this->type == 'png') {
imagefill($newimg, 0, 0, imagecolorallocate($newimg, 255, 255, 255));
}
imagecopyresampled($newimg, $this->img, 0, 0, 0, 0, $this->width, $this->height, $this->width, $this->height);
$this->img = $newimg;
}
/**
* вывод
*
* @param array массив с параметрами
* @return вывод изображение на страницу через заголовок или сохранить локально
*/
public function out($mode = array())
{
/**
* массив параметров по умолчанию
* тип
* имя файла без расширения
* качество изображения только для png и jpg
* фильтр только для png
*
* @var array
*/
$defaultmode = array(
'type' => 'png',
'newfile' => null,
'quality' => 9,
'filters' => PNG_ALL_FILTERS
);
foreach($defaultmode as $k => $v) {
if (!isset($mode[$k])) {
$mode[$k] = $v;
}
}
$imgfuncout = 'image' . $mode['type'];
if (!function_exists($imgfuncout)) {
throw new Exception('unsupported function ' . $imgfuncout);
}
if ($mode['newfile'] == null) {
header('Content-Type: image/' . $mode['type']);
}
else {
$mode['newfile'] = $mode['newfile'] . '.' . $mode['type'];
}
switch ($mode['type']) {
case 'gif':
$imgfuncout($this->img, $mode['newfile']);
break;
case 'jpeg':
$imgfuncout($this->img, $mode['newfile'], $mode['quality']);
break;
default:
$imgfuncout($this->img, $mode['newfile'], $mode['quality'], $mode['filters']);
break;
}
}
public function copyright($text, $angle = 1)
{
/**
* наложение копирайта
*
* @param string текст копирайта
* @param interer угол
* 1 - левый нижний
* 2 - левый верхний
* @return resource
*/
$newimg = imagecreatetruecolor($this->width, 17);
$white = imagecolorallocate($newimg, 0, 0, 0);
$grey = imagecolorallocate($newimg, 128, 128, 128);
$blue = imagecolorallocate($newimg, 0, 128, 128);
$red = imagecolorallocate($newimg, 255, 0, 0);
$black = imagecolorallocate($newimg, 255, 255, 255);
imagecolortransparent($newimg, $white);
imagefilledrectangle($newimg, 0, 0, 69, 14, $white);
$font = 'arial.ttf';
imagettftext($newimg, 12, 0, 5, 14, $red, $font, $text);
imagettftext($newimg, 12, 0, 4, 13, $blue, $font, $text);
imagettftext($newimg, 12, 0, 3, 12, $black, $font, $text);
imagecopymerge($this->img, $newimg, 0, ($angle == 1 ? $this->height - 17 : 0) , 0, 0, $this->width, $this->height, 100);
}
public function mirroring()
{
/**
* отображение в зеркале
* @return resource
*/
$newimg = imagecreatetruecolor($this->width, $this->height);
foreach(range($this->width, 0) as $range) {
imagecopy($newimg, $this->img, $this->width - $range - 1, 0, $range, 0, 1, $this->height);
}
$this->img = $newimg;
}
public function rotate($angle = 90)
{
/**
* поворот изображения
* @param integer угл наклона 0 - 359
* default 90
* @return resource
*/
$white = imagecolorallocate($this->img, 255, 255, 255);
imagecolortransparent($this->img, $white);
$this->img = imagerotate($this->img, $angle, $white);
$this->width = $this->newx();
$this->height = $this->newy();
}
public function grayscale()
{
/**
* создание чернобелого изображения
* @return resource
*/
imagefilter($this->img, IMG_FILTER_GRAYSCALE);
}
public function reheight($height)
{
/**
* пропорциональное изменение по высоте
* @param integer новая длина
* @return resource
*/
$width = $this->newx() * ($height / $this->newy());
$this->resize($width, $height);
}
public function rewidth($width)
{
/**
* пропорциональное изменение по ширине
* @param integer новая ширина
* @return resource
*/
$height = $this->newy() * ($width / $this->newx());
$this->resize($width, $height);
}
public function scale($scale)
{
/**
* пропорциональное изменение по ширине и высоте в процентах
* @param integer процент
* @return resource
*/
$width = $this->newx() * ($scale / 100);
$height = $this->newy() * ($scale / 100);
$this->resize($width, $height);
}
public function resize($width, $height)
{
/**
* изменение по ширине и высоте
* @param integer новая ширина
* @param integer новая высота
* @return resource
*/
$newimg = imagecreatetruecolor($width, $height);
imagecopyresampled($newimg, $this->img, 0, 0, 0, 0, $width, $height, $this->newx() , $this->newy());
$this->img = $newimg;
$this->width = $this->newx();
$this->height = $this->newy();
}
public function newx()
{
/**
* получение ширины изображения
* @return integer
*/
return imagesx($this->img);
}
public function newy()
{
/**
* получение высоты изображения
* @return integer
*/
return imagesy($this->img);
}
public function __destruct()
{
/**
* деструктор
* @return null
*/
imagedestroy($this->img);
foreach($this as $key => $value) {
unset($this->$key);
}
}
}
?>