Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Кроп изображении портит качество

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: замыливает изображение
Annushka30
Отправлено: 18 Января, 2016 - 23:04:30
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Здравствуйте, есть скрипт обрезки и сохранения изображения. Проблема в том что качество у imagejpeg стоит 100, но он все равно замыливает фото.
Демо http://skaz[dot]h919848s[dot]bget[dot]ru/sit[dot][dot][dot]rop/settings.php
Если нужно могу выслать исходники

P.S. это уже третий форум, может я как то неправильно вопрос формулирую, напишите я исправлю

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $imgUrl = $_POST['imgUrl'];
  4. // original sizes
  5. $imgInitW = $_POST['imgInitW'];
  6. $imgInitH = $_POST['imgInitH'];
  7. // resized sizes
  8. $imgW = $_POST['imgW'];
  9. $imgH = $_POST['imgH'];
  10. // offsets
  11. $imgY1 = $_POST['imgY1'];
  12. $imgX1 = $_POST['imgX1'];
  13. // crop box
  14. $cropW = $_POST['cropW'];
  15. $cropH = $_POST['cropH'];
  16. // rotation angle
  17. $angle = $_POST['rotation'];
  18.  
  19. $jpeg_quality = 100;
  20. $output_filename = dirname($imgUrl). "/croppedImg_".rand();
  21. $big_filename = $nazv[0]."/".$nazv[1]."/big/croppedImg_".rand();
  22.  
  23. $what = getimagesize($imgUrl);
  24.  
  25. switch(strtolower($what['mime']))
  26. {
  27.     case 'image/png':
  28.         $img_r = imagecreatefrompng($imgUrl);
  29.         $source_image = imagecreatefrompng($imgUrl);
  30.         $type = '.png';
  31.         break;
  32.     case 'image/jpeg':
  33.         $img_r = imagecreatefromjpeg($imgUrl);
  34.         $source_image = imagecreatefromjpeg($imgUrl);
  35.         error_log("jpg");
  36.         $type = '.jpeg';
  37.         break;
  38.     case 'image/gif':
  39.         $img_r = imagecreatefromgif($imgUrl);
  40.         $source_image = imagecreatefromgif($imgUrl);
  41.         $type = '.gif';
  42.         break;
  43.     default: die('image type not supported');
  44. }
  45.  
  46.  
  47. //Check write Access to Directory
  48.  
  49. if(!is_writable(dirname($output_filename))){
  50.     $response = Array(
  51.         "status" => 'error',
  52.         "message" => 'Can`t write cropped File'
  53.     );  
  54. }else{
  55.     // resize the original image to size of editor
  56.    
  57.     $resizedImage = imagecreatetruecolor($imgW, $imgH);
  58.     imagecolortransparent($resizedImage, imagecolorallocate($resizedImage, 0, 0, 0));      
  59.     //Отключаем режим сопряжения цветов
  60.     imagealphablending($resizedImage, false);
  61.     //Включаем сохранение альфа канала
  62.     imagesavealpha($resizedImage, true);
  63.    
  64.     imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, $imgW, $imgH, $imgInitW, $imgInitH);
  65.    
  66.     // rotate the rezized image
  67.     $rotated_image = imagerotate($resizedImage, -$angle, 0);
  68.     // find new width & height of rotated image
  69.     $rotated_width = imagesx($rotated_image);
  70.     $rotated_height = imagesy($rotated_image);
  71.     // diff between rotated & original sizes
  72.     $dx = $rotated_width - $imgW;
  73.     $dy = $rotated_height - $imgH;
  74.     // crop rotated image to fit into original rezized rectangle
  75.     $cropped_rotated_image = imagecreatetruecolor($imgW, $imgH);
  76.    
  77.     imagecolortransparent($cropped_rotated_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0));
  78.        
  79.     imagealphablending($cropped_rotated_image, false);
  80.     //Включаем сохранение альфа канала
  81.     imagesavealpha($cropped_rotated_image, true);
  82.        
  83.     imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, $imgW, $imgH, $imgW, $imgH);
  84.     // crop image into selected area
  85.     $final_image = imagecreatetruecolor($cropW, $cropH);
  86.    
  87.     imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0));
  88.     imagealphablending($final_image, false);
  89.     //Включаем сохранение альфа канала
  90.     imagesavealpha($final_image, true);
  91.        
  92.     imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, $imgX1, $imgY1, $cropW, $cropH, $cropW, $cropH);
  93.     // finally output png image
  94.     if($type == '.png')
  95.     {
  96.         imagepng($final_image, $output_filename.$type, 0);
  97.     }
  98.     else
  99.     {
  100.         imagejpeg($final_image, $output_filename.$type, $jpeg_quality);
  101.     }
  102.     $response = Array(
  103.         "status" => 'success',
  104.         "url" => $output_filename.$type
  105.     );
  106. }
  107. print json_encode($response);
  108.  
 
 Top
Мелкий Супермодератор
Отправлено: 19 Января, 2016 - 06:02:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Попробуйте imagescale http://php.net/manual/en/function.imagescale.php
Или переходите на Imagick


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB