Arlevnar
Новичок
Доброго времени суток Уважаемые Коллеги.
Хотел бы прконсультироваться с вами по вопросу функционала одного класса для работы с изображениями.
Я конечно прекрасно понимаю что готовых решений океан. Но всё же в голову пришла мысль создать собственный класс. Вопрос такой.
Есть класс (пока особо не богатый методами) который бы хотелось бы раширить но в голову помимо просто ресайза пока нечего не приходит. Подскажите пожалуйста что бы можно было бы пересмотреть в данном классе и какой бы функционал можно было бы добавить. Собственно говоря вот и сам код:
Хотел бы прконсультироваться с вами по вопросу функционала одного класса для работы с изображениями.
Я конечно прекрасно понимаю что готовых решений океан. Но всё же в голову пришла мысль создать собственный класс. Вопрос такой.
Есть класс (пока особо не богатый методами) который бы хотелось бы раширить но в голову помимо просто ресайза пока нечего не приходит. Подскажите пожалуйста что бы можно было бы пересмотреть в данном классе и какой бы функционал можно было бы добавить. Собственно говоря вот и сам код:
PHP:
class Image {
public $filename;
public $name;
public $extension;
public $mime;
public $width;
public $height;
public $file_size;
public $ratio;
public function __construct($filename)
{
if (!self::is_image($filename)) {
trigger_error('The file is not an image', E_USER_ERROR);
}
$this->filename = $filename;
$this->init_settings();
}
public static function is_image($filename)
{
if (!file_exists($filename)) {
trigger_error('File "'.$filename.'" not found');
}
return count(getimagesize($filename)) ? true : false;
}
private function init_settings()
{
if (!$this->filename) return;
$data = getimagesize($this->filename);
$this->mime = $data['mime'];
$this->width = $data[0];
$this->height = $data[1];
$this->file_size = filesize($this->filename);
$this->extension = strtolower(array_pop(explode(".", basename($this->filename))));
$this->name = preg_replace('/\.'.$this->extension.'$/','',basename($this->filename));
$this->ratio = $data[0]/$data[1];
}
public function __set($name, $value)
{
trigger_error('The property can not be overridden', E_USER_ERROR);
}
public function resize_calculation($width, $height)
{
if (!isset($width) && !isset($height)) {
trigger_error('Not indicated the size of the image', E_USER_ERROR);
}
elseif ($width && $height == null) {
$height = $width / $this->ratio;
}
elseif ($width == null && $height) {
$width = $height * $this->ratio;
}
return array($width, $height);
}
public function resize($width, $height, $new_filename=null)
{
list($new_w, $new_h) = $this->resize_calculation($width, $height);
$type = str_replace('image/', '', $this->mime);
$dst_image = imagecreatetruecolor($new_w, $new_h);
$src_image = call_user_func('imagecreatefrom'.$type , $this->filename);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $new_w, $new_h, $this->width, $this->height);
if ($new_filename == true) {
$new_filename = $this->name.'_'.$new_w.'_'.$new_h.'.'.$this->extension;
}
elseif($new_filename) {
if (!is_dir(dirname($new_filename))) {
trigger_error(dirname($new_filename).' directory not found');
}
else {
$dir = realpath(dirname($new_filename));
$new_filename = preg_replace('/\.[a-zA-Z]+$/', '', basename($new_filename)).'.'.$this->extension;
$new_filename = $dir.DIRECTORY_SEPARATOR.$new_filename;
}
}
else {
header('Content-Type: '.$this->mime);
}
call_user_func('image'.$type, $dst_image, $new_filename);
if (file_exists($new_filename)) {
return realpath($new_filename);
}
}
}