немного зная gd2 написал класс который обрабатывает изображение... как-то не обратил внимание, что resize он делает как-то похабно... вот пример мне кажется, что я не ту функцию использовал для ресайзинга.. можете подсказать какую нужно использовать в данном случае отрывок из класса..функция которая резайзит img PHP: <?php function re_resize($filename = '',$filename_out = '') { $file = $this->re_file($filename); if (is_object($file)) { if ($file->width >= $this->resize_w && $file->height >= $this->resize_h) { if ($file->width > $file->height) { $var_w = $this->resize_w; $var_h = $file->height/($file->width/$this->resize_w); } else if ($file->width == $file->height) { if ($this->resize_w > $this->resize_h) { $var_w = $this->resize_w; $var_h = $file->height/($file->width/$this->resize_w); } else if ($this->resize_w < $this->resize_h) { $var_w = $file->width/($file->height/$this->resize_h); $var_h = $this->resize_h; } else if ($this->resize_w == $this->resize_h) { $var_w = $this->resize_w; $var_h = $this->resize_h; } } else { $var_h = $this->resize_h; $var_w = $file->width/($file->height/$this->resize_h); } $thumb = imagecreatetruecolor($var_w, $var_h); imagecopyresized($thumb, $file->source, 0, 0, 0, 0, $var_w, $var_h, $file->width, $file->height); if ($this->watermark != FALSE) { if (@exif_imagetype($this->watermark) == 3) { $offset = 5; // Only PNG $r = imagecreatefrompng($this->watermark); $x = imagesx($r); $y = imagesy($r); $xDest = $var_w - ($x + $offset); $yDest = $var_h - ($y + $offset); imageAlphaBlending($thumb,1); imageAlphaBlending($r,1); imagesavealpha($thumb,1); imagesavealpha($r,1); imagecopyresampled($thumb,$r,$xDest,$yDest,0,0,$x,$y,$x,$y); imagedestroy($r); } } imagejpeg($thumb, $filename_out, $this->quality); imagedestroy($thumb); } else { // Изображение не соответствует нужным размерам return $this->re_report_errors(3); } } } ?>
ммм у вас сначала imagecopyresized, потом imagecopyresampled, где то тут была тема что это быстрее в 4 раза но ухудшается качество, сколько тут $this->quality ?
q = 100 ну это уже видно... ну мне не скорость главное.. у меня загрузка картинок идет по одной при таком варианте, я думаю лучше качество улучшить... дело в том что класс я делал на скорую руку не было времени играться... если поможете с фиксом отошлю вам весь класс
в этой книжке полностью класс реализован... рекомендую еше вот это хотябы первую главу, там описано как правильно делать отступы,расставлять скобки, комментировать и называть переменные, тяжеловато ваш код читать
часть с imagecopyresampled($thumb,$r,$xDest,$yDest,0,0,$x,$y,$x,$y); это накладка ватер марка..кстати.. при создании этой картинки я использовал параметр watermark == FALSE т.е. imagecopyresampled не использовал
ну, у меня вот такой ресайз пока стоит... PHP: <? $path=''; $handle = imagecreatefromjpeg($path); $width = imagesx($handle); $height = imagesy($handle); if ($width > 250){ $new_width = 250; $new_height = $height * ($new_width/$width); $resized = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($resized, $handle, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($resized, $path, 60); } вроде норм, только у меня без вотермарка
кажись я понял... imagecopyresized -просто уменьшает imagecopyresampled - уменьшает с сглаживанием типа ..вот поэтому magecopyresized быстрее он как браузер уменьшил и всё )
блин это же очевидно.. елки палки )) по моему я сегодня переработал.. Padaboo мой класс делает Кроп определенному размеру как вконтакте Рекроп - если картинка широкая или высокая он вырезает правильный момент и делаем фиксорованый размер например вам нужно чтобы рисунок 400 на 600 был 100 на 100 - и ресайзит и вырезает Ресайз - это вы уже знаете Конфиги загружаются через массив =) если нужен класс кричите в личку скину
неее, так не интересно) самому интереснее написать) книжки могу залить если интересно ммм.. я вот думаю копирование в нужную папку и генерацию имени в этот же класс пихать или расширять его или просто отдельной функцией
Padaboo 100%, та я сам запутался в том, что писал, надо срочно прочитать книгу..как раз у меня она есть недавно достал..только вот почитать нет времени =) завтра + 2 ч на чтение согласен, поэтому я сам и написал, кстати этой мой первый класс
хммм это как, я думал через __construct при инициализации объекта делать зы: мой первый класс был с 1м методом и все что он делал выводил в консоль "еб*ный питон"
ну мой первый класс тоже был привет мир ) я имел ввиду первый класс который помог мне ) и которым я пользуюсь загрузка конфигов я взял идею с CodeIgniter PHP: <?php function initialize($config = array()) { $defaults = array( 'resize_w' => 100, 'resize_h' => 100, 'cropsize_w' => 100, 'cropsize_h' => 100, 'crop_w' => 100, 'crop_h' => 100, 'watermark' => FALSE, 'quality' => 75 ); foreach ($defaults as $key => $val) { if (isset($config[$key])) { $method = 'set_'.$key; if (method_exists($this, $method)) { $this->$method($config[$key]); } else { $this->$key = $config[$key]; } } else { $this->$key = $val; } } } ?>