Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Кроп изображении портит качество, замыливает изображение
Annushka30  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 42399
На форуме: 10 месяцев, 22 дня
Карма:




Здравствуйте, есть скрипт обрезки и сохранения изображения. Проблема в том что качество у imagejpeg стоит 100, но он все равно замыливает фото.
Демо http://skaz.h919848s.bget.ru/siteCrop/settings.php
Если нужно могу выслать исходники
Фото "до кропа и после"
user posted image

<?php
$imgUrl = $_POST['imgUrl'];
// original sizes
$imgInitW = $_POST['imgInitW'];
$imgInitH = $_POST['imgInitH'];
// resized sizes
$imgW = $_POST['imgW'];
$imgH = $_POST['imgH'];
// offsets
$imgY1 = $_POST['imgY1'];
$imgX1 = $_POST['imgX1'];
// crop box
$cropW = $_POST['cropW'];
$cropH = $_POST['cropH'];
// rotation angle
$angle = $_POST['rotation'];

$jpeg_quality = 100;
$output_filename = dirname($imgUrl). "/croppedImg_".rand();
$big_filename = $nazv[0]."/".$nazv[1]."/big/croppedImg_".rand();

$what = getimagesize($imgUrl);

switch(strtolower($what['mime']))
{
case 'image/png':
$img_r = imagecreatefrompng($imgUrl);
$source_image = imagecreatefrompng($imgUrl);
$type = '.png';
break;
case 'image/jpeg':
$img_r = imagecreatefromjpeg($imgUrl);
$source_image = imagecreatefromjpeg($imgUrl);
error_log("jpg");
$type = '.jpeg';
break;
case 'image/gif':
$img_r = imagecreatefromgif($imgUrl);
$source_image = imagecreatefromgif($imgUrl);
$type = '.gif';
break;
default: die('image type not supported');
}


//Check write Access to Directory

if(!is_writable(dirname($output_filename))){
$response = Array(
"status" => 'error',
"message" => 'Can`t write cropped File'
);
}else{
// resize the original image to size of editor

$resizedImage = imagecreatetruecolor($imgW, $imgH);
imagecolortransparent($resizedImage, imagecolorallocate($resizedImage, 0, 0, 0));
//Отключаем режим сопряжения цветов
imagealphablending($resizedImage, false);
//Включаем сохранение альфа канала
imagesavealpha($resizedImage, true);

imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, $imgW, $imgH, $imgInitW, $imgInitH);

// rotate the rezized image
$rotated_image = imagerotate($resizedImage, -$angle, 0);
// find new width & height of rotated image
$rotated_width = imagesx($rotated_image);
$rotated_height = imagesy($rotated_image);
// diff between rotated & original sizes
$dx = $rotated_width - $imgW;
$dy = $rotated_height - $imgH;
// crop rotated image to fit into original rezized rectangle
$cropped_rotated_image = imagecreatetruecolor($imgW, $imgH);

imagecolortransparent($cropped_rotated_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0));

imagealphablending($cropped_rotated_image, false);
//Включаем сохранение альфа канала
imagesavealpha($cropped_rotated_image, true);

imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, $imgW, $imgH, $imgW, $imgH);
// crop image into selected area
$final_image = imagecreatetruecolor($cropW, $cropH);

imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0));
imagealphablending($final_image, false);
//Включаем сохранение альфа канала
imagesavealpha($final_image, true);

imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, $imgX1, $imgY1, $cropW, $cropH, $cropW, $cropH);
// finally output png image
if($type == '.png')
{
imagepng($final_image, $output_filename.$type, 0);
}
else
{
imagejpeg($final_image, $output_filename.$type, $jpeg_quality);
}
$response = Array(
"status" => 'success',
"url" => $output_filename.$type
);
}
print json_encode($response);
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Из-за поворота изображения.
Если угол 0 (не нужно поворачивать) – не делай imagerotate().
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Annushka30  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 42399
На форуме: 10 месяцев, 22 дня
Карма:




Guest Спасибо огромное, все получилось, черт с ним с поворотом ))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Там короче нужно поиграться с интерполяцией. Что то вроде
imagesetinterpolation($resizedImage, IMG_MITCHELL);
$rotated_image = imagerotate($resizedImage, -$angle, 0);


Какие вообще есть методы интерполяции написано здесь http://php.net/manual/ru/function.imagesetinterpolation.php
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса