[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс для работы с изображениями
xvii
<?php

class
IMG{

function __construct($file=false){ #URL изображения
if($file){
if(!is_file($file))$this->error='Такого файла не существует!';
$this->image=$this->imagecreatefromfile($file);
$this->width=imagesx($this->image);
$this->height=imagesy($this->image);
}
}


function create($w,$h){ #Создает пустое изображение (Ширина и высота)
$img=imagecreatetruecolor($w,$h);
$this->image=$img;
$this->width=$w;
$this->height=$h;
}

function imagecreatefromfile($f){ #Создает картинку из файла jpeg, gif или png (url файла)
if(!is_file($f))return false;
$img=@imagecreatefromjpeg($f);
if(!$img)$img=@imagecreatefromgif($f);
if(!$img)$img=@imagecreatefrompng($f);
return $img;
}

function resize($w,$h){ #Изменяет размер картинки (ширина, высота)
$new=imagecreatetruecolor($w,$h);
imagecopyresampled($new,$this->image,0,0,0,0,$w,$h,$this->width,$this->height);
$this->image=$new;
}

function resize_w($w){ #Изменяет размер картинки пропорционально (ширина)
$proc=$this->width/$w;
$h=$this->height/$proc;
$new=imagecreatetruecolor($w,$h);
imagecopyresampled($new,$this->image,0,0,0,0,$w,$h,$this->width,$this->height);
$this->image=$new;
}


function water($img){ #Накладывает "водяную марку" на картинку справа снизу (URL картинки)
$wat=$this->imagecreatefromfile($img);
$w=imagesx($wat);
$h=imagesy($wat);
imagecopyresampled($this->image,$wat,$this->width-$w,$this->height-$h,0,0,$w,$h,$w,$h);
}

function negative(){ #Применяет фильтр "негатив"
imagefilter($this->image,IMG_FILTER_NEGATE);
}

function blur(){ #Фильтр размытие
imagefilter($this->image,IMG_FILTER_GAUSSIAN_BLUR);
}

function grey(){ #Фильтр "черно-белый"
imagefilter($this->image,IMG_FILTER_GRAYSCALE);
}

function emboss(){ #Фильтр emboss
imagefilter($this->image,IMG_FILTER_EMBOSS);
}

function rotate($deg){ #Поворачивает изображение на определенный градус (градус)
imagerotate($this->image,$deg,0);
}

function fill($col){ #Заполняет картинку одним цветом (цвет)
imagefilledrectangle($this->image,0,0,$this->width,$this->height,hexdec($col));
}

function ttftext($text,$x,$y,$size,$col,$face='comic',$ramka=false){ #Накладывает текст (текст, позиция Х, позиция У, размер, цвет в hex без #, путь к шрифту ttf, обрамление шрифта рамкой)
$col=hexdec($col);
$ramka=hexdec($ramka);
if($ramka){
$ramka=hexdec($ramka);
imagettftext($this->image,$size,0,$x-1,$y+$size,$ramka,$face,$text);
imagettftext($this->image,$size,0,$x+1,$y+$size,$ramka,$face,$text);
imagettftext($this->image,$size,0,$x,$y+1+$size,$ramka,$face,$text);
imagettftext($this->image,$size,0,$x,$y-1+$size,$ramka,$face,$text);
}
imagettftext($this->image,$size,0,$x,$y+$size,$col,$face,$text);
}

function ttftext_align($text,$align,$size,$y=3,$col='000000',$face='garamond'){ #Тоже что и прошлое, только с центровкой справа, слева, по-центру
if($align=='left')$x=$y;
elseif($align=='right'){
$arr=imagettfbbox($size,0,$face,$text);
$x=$this->width-$arr[4]-$size;
}
imagettftext($this->image,$size,0,$x,$y+$size,$col,$face,$text);
}

function show(){ #Выводит изображение в браузер
ob_end_clean();
header('content-type:image/png');
imagepng($this->image);
imagedestroy($this->image);
}

function save_temp(){ #Сохраняет картинку в кэше для последующего открытия при новом вызывании скрипта
if(!$_SESSION['image'])$_SESSION['image']=time();
@imagegd2($this->image,$_SERVER['DOCUMENT_ROOT'].'/temp/'.$_SESSION['image']);
}

function load_temp(){ #Загружает картинку из кэша
$this->image=imagecreatefromgd2($_SERVER['DOCUMENT_ROOT'].'/temp/'.$_SESSION['image']);
$this->width=imagesx($this->image);
$this->height=imagesy($this->image);
}

function save($f){ #Сохраняет картинку в jpeg формате (путь)
imagejpeg($this->image,$f);
}

function delete_temp(){ #Удаляет картинку из кэша
if($_SESSION['image']){@unlink($_SERVER['DOCUMENT_ROOT'].'/temp/'.$_SESSION['image']);
$_SESSION['image']=false;}
}


function setka(){ #Накладывает на картинку сетку с клетками 20х20 (хорошо для онлайн рисовалок)
$lines_w=ceil($this->width/20);
$lines_h=ceil($this->height/20);

for($i=1;$i<$lines_w;$i++){
imageline($this->image,($i*20),0,($i*20),$this->height,mt_rand(0x00,0xffffff));
}
for($i=1;$i<$lines_h;$i++){
imageline($this->image,0,($i*20),$this->width,($i*20),mt_rand(0x00,0xffffff));
}

}

}


?>


Пример

<?
$img=new IMG('1.jpg'); #Загрузили картинку
$img->resize_w(100); #Изменили размер относительно ширины 100
$img->blur(); #Размыли
$img->show(); #Показали
?>


Я бы не сказал, что класс прям очень качественный, но может кому-то пригодится. Можете доработать, кто хочет. Только поделитесь потом ;)




Спустя 14 минут, 29 секунд (22.08.2011 - 18:02) m4a1fox написал(а):
Можно сказать?! (риторический вопрос smile.gif). Меня как-то поправляли, поэтому не серчайте... \Просто есть маленький глюк! Если метод не определяется как privat или static, то по умолчанию он - public, но это не значит что его писать не стоит. Стоит еще как стоит! И еще! Я заметил, что у вас, не все методы - public (по умолчанию). Но ведь навернякак еще и privat или static методы, а вы их - не определили! Вот!

P.S. А проверка на то что это картинка, есть? А то что то я пропустил наверно?

Спустя 4 часа, 49 минут, 20 секунд (22.08.2011 - 22:52) xvii написал(а):
проверка при загрузке там где проверяется формат изображения
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.