|
 101.9 Кб |
|
| Всем привет! Возник казус... Очень не приятный.
Пишу скрипт, который тупо загружает фотку в 3 папки, делая нужные размеры.
С ресайзом и копированием никаких проблем нет. НО! В итоге качество изображения ужасное...
Код ниже. Итоговая картинка (пока копирую только одну фотку) во вложении.
<?php
define('NG', 1);
define('TMP', dirname(__FILE__) . '/tmp/');
define('WORKS', dirname(__FILE__) . '/works/');
$sizes = array(
'normal' => array('width' => 725, 'height' => 480),
'preview' => array('width' => 235, 'height' => 168),
'mini' => array('width' => 84, 'height' => 60)
);
function reSizes($originalPhoto, $sizes, $type) {
$originalPhotoSizes = getimagesize('tmp/' . $originalPhoto);
$width = $originalPhotoSizes[0];
$height = $originalPhotoSizes[1];
if ($width > $sizes[$type]['width']) {
$ratio = $width / $sizes[$type]['width'];
$width = $width / $ratio;
$height = $height / $ratio;
}
$newImage = imagecreate($sizes[$type]['width'], $sizes[$type]['height']);
$resizedImage = imagecreatefrompng(TMP . $originalPhoto);
imagecopyresampled($newImage, $resizedImage, 0, 0, 0, 0, $width, $height, $originalPhotoSizes[0], $originalPhotoSizes[1]);
return $newImage;
}
if (isset($_POST['load'])) {
include_once 'includes/db.php';
mysql_query('INSERT INTO `work_photos` (`id`, `id_item`, `name`, `sys_name`, `publish`) VALUES (NULL, ' . $_POST['id_item'] . ', "' . $_POST['name'] . '", "", ' . $_POST['publish'] . ')');
$newPhotoSQL = mysql_query('SELECT * FROM `work_photos` ORDER BY `id` DESC LIMIT 1');
$newPhoto = mysql_fetch_object($newPhotoSQL);
mysql_query('UPDATE `work_photos` SET `sys_name` = "' . md5('photo id ' . $newPhoto->id) . '" WHERE `id` = ' . $newPhoto->id);
$newPhotoFileName = md5('item id ' . $_POST['id_item']) . '_' . md5('photo id ' . $newPhoto->id) . '.png';
copy($_FILES['photo']['tmp_name'], TMP . $newPhotoFileName);
$newImageNormal = reSizes($newPhotoFileName, $sizes, 'normal');
imagepng($newImageNormal, WORKS . 'normal/' . $newPhotoFileName);
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Загрузка изображения</title>
</head>
<body>
<form action="loadimage.php" method="post" enctype="multipart/form-data">
<input type="text" name="id_item" /> - ИД Записи<br /><br />
<input type="text" name="name" /> - Имя фотографии<br /><br />
<input type="radio" name="publish" value="1" checked /> - Опубликовано |
<input type="radio" name="publish" value="0" /> - Не опубликовано<br /><br />
<input type="file" name="photo" /><br /><br />
<input type="submit" name="load" value="Загрузить" />
</form>
</body>
</html>
|
| |
|
|
|
|
 978.1 Кб |
|
|
для: n1ko
(07.01.2013 в 12:19)
| | А это оригинал | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 12:21)
| | зачем делать png на непрозрачном фоне? | |
|
|
|
|
|
|
|
для: elenaki
(07.01.2013 в 13:49)
| | Это никак вопрос не решит. Хоть на зелёном, на белом или прозрачном. Это вообще фотографии, просто в png формате. | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 14:48)
| | фотографии делают в jpg. я лично всегда переделываю png в jpg, если нет прозрачности. | |
|
|
|
|
|
|
|
для: elenaki
(07.01.2013 в 15:02)
| | Оружие раньше тоже было только острым. а теперь ещё и стреляет)
Необходимо png и я обратился с вопросом про ужасную потерю качества. А Вы начали никчёмные теории о расширении фото.
Полупрозрачный водяной знак я тоже в jpg буду накладывать?!!
А качество нужно отличное, без потерь | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 15:19)
| | а чего тогда жалуемся на качество? я про прозрачность и ПОЛУпрозрачность не говорила. на
фотках ничего прозрачного нет. не умеешь пользоваться инструментом - не берись. | |
|
|
|
|
|
|
|
для: elenaki
(07.01.2013 в 15:27)
| | А где я написал и продемонстрировал полупрозрачный исходный графический файл?!!
Уважаемая, складывайте мои слова последовательно, а не снизу вверх и по кускам.
Мне необходим файл в PNG и точка! Раз на то пошло, то успокою Ваше самолюбие и сообщу, что файл из JPG в JPG ужимая, я получаю тот же результат, за исключением нескольких пикселей. Хотя ставлю качество 100%.
А про "умеешь - не умеешь" прошу не говорить. Вы особо тоже не сказали, как исправить ситуацию. | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 12:21)
| | Какая версия php?
Начиная с версии 5.1.2 добавлен 3ий аргумент функции imagepng - степень сжатия - целое число от 0 (нет сжатия) до 9.
Попробуйте разные варианты. | |
|
|
|
|
|
|
|
для: Sfinks
(10.01.2013 в 00:51)
| | Эксперементировал - дело в функции "imagecreate". Внизу адекватный ответ дали )... | |
|
|
|
|
|
|
|
для: n1ko
(10.01.2013 в 01:49)
| | Да, я уж потом увидел. | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 12:19)
| | Или вот. В ФотоШопе сделал PNG картинку.
Оригинал: http://natti-moda.ru/tmp/ba29ba75703c058fff94c75274f0085f_84e34d84884aa57d0f2125666c69b607.png
То, что получилось: http://natti-moda.ru/works/normal/ba29ba75703c058fff94c75274f0085f_84e34d84884aa57d0f2125666c69b607.png | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 12:19)
| | В функции imagepng() добавьте третий параметр - 0, посмотрите, не изменится ли результат. | |
|
|
|
|
 610.7 Кб |
|
|
для: cheops
(07.01.2013 в 13:34)
| | Собственно фото: http://natti-moda.ru/works/normal/ba29ba75703c058fff94c75274f0085f_2e1c31f191ac90aed8f26ee45153b159.png
А файл из фотошопа: http://natti-moda.ru/works/normal/ba29ba75703c058fff94c75274f0085f_6ade6b7432395f1783663573252d4606.png
Оригинал фотошопной во вложении | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 12:19)
| | Предлагаю закрыть тему, ибо тут больше споров, чем решений)
А я нашёл другой выход, никак не относящийся к php | |
|
|
|
|
|
|
|
для: n1ko
(07.01.2013 в 15:40)
| | Для создания уменьшенного изображения, вы используете функцию imagecreate(). Эта функция поддерживает только 256 цветов. Чтобы создать полноцветное изображение, следует использовать функцию imagecreatetruecolor(). | |
|
|
|
|
|
|
|
для: Drago
(07.01.2013 в 18:50)
| | Спасибо! Самый лучший ответ, жаль оценить нельзя! Никаких встречных вопросов и притензий, а лишь ответ, что и как) СПАСИБО)
Испытаю - отвечу...) | |
|
|
|