jcrop — php созданное изображение с точками

Я создал приложение, в котором пользователь может загрузить изображение, обрезать его с помощью jCrop, а затем отправить ему по электронной почте.
Все работает, как и ожидалось, но скрипт php, который создает изображение, похоже, немного снижает качество при кадрировании / изменении размера. Это не экстремально, но мне нужно то же разрешение, что и у загруженного изображения. Я имел imagejpg () и изменил его с помощью imagepng (), но безуспешно.
Возможно ты можешь помочь мне.
Вот код:

list($oWidth, $oHeight) = getimagesize($_POST["hiddenSrc"]);
$xPos = $_POST["x1h"];
$yPos = $_POST["y1h"];
$targ_w = $_POST["wh"];
$targ_h = $_POST["hh"];
$jpeg_quality = 9;

$src = $_POST["hiddenSrc"];


if(mime_content_type($src) == "image/jpeg")
{
$img_r = imagecreatefromjpeg($src);
}
else if(mime_content_type($src) == "image/png")
{
$img_r = imagecreatefrompng($src);
}

$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

imagecopyresampled($dst_r,$img_r,0,0,$xPos,$yPos,$targ_w,$targ_h,$targ_w,$targ_h);

if(!file_exists('../FOLDER/'.$_SESSION['foldername'].'/PRODUKT'.$_SESSION['productNameCount'].'.png'))
{
imagepng($dst_r,"../FOLDER/".$_SESSION['foldername']."/PRODUKT".$_SESSION['productNameCount'].".png",$jpeg_quality);
}

Остальная часть сценария просто создает папку и другие вещи, которые не связаны с изображением.

Большое спасибо!

Остальное — только некоторые функции, определяющие, что изображение не слишком маленькое, т. Д.

Вот сравнение до / после:

ДО

ПОСЛЕ

Я знаю, что разница невелика, но она хорошо видна при печати изображения

2

Решение

Я думаю, что в вашем случае это связано со значением, которое вы используете для сжатия.

для imagejpeg: качество является необязательным и варьируется от 0 (худшее качество, меньший файл) до 100 (наилучшее качество, самый большой файл). По умолчанию используется значение качества IJG по умолчанию (около 75).

для imagepng: уровень сжатия от 0 (без сжатия) до 9.

Вот пример того, что может быть результатом в вашем случае:

list($oWidth, $oHeight) = getimagesize($_POST["hiddenSrc"]);
$xPos = $_POST["x1h"];
$yPos = $_POST["y1h"];
$targ_w = $_POST["wh"];
$targ_h = $_POST["hh"];

$src = $_POST["hiddenSrc"];


if(mime_content_type($src) == "image/jpeg")
{
$img_r = imagecreatefromjpeg($src);
$jpeg_quality = 90;
}
else if(mime_content_type($src) == "image/png")
{
$img_r = imagecreatefrompng($src);
$png_quality = 0;
}

$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

imagecopyresampled($dst_r,$img_r,0,0,$xPos,$yPos,$targ_w,$targ_h,$targ_w,$targ_h);

if(!file_exists('../FOLDER/'.$_SESSION['foldername'].'/produkt'.$_SESSION['productNameCount'].'.png'))
{
imagepng($dst_r,"../FOLDER/".$_SESSION['foldername']."/PRODUKT".$_SESSION['productNameCount'].".png",$png_quality);
}
1

Другие решения

замещать

$jpeg_quality = 9;

с

$jpeg_quality = 100;

Вы можете использовать любое значение от нуля до 100

0

Я наконец-то понял проблему.

Я передал загруженное изображение в URL-адрес данных, что снизило качество. Если я загружаю файл изображения напрямую, качество остается прежним.
(+ Я использую Imagemagick)

Но сейчас у меня проблемы с потерей качества при изменении размеров изображений, но это уже другая история и другая тема;)

Спасибо всем

0
По вопросам рекламы [email protected]