Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Качество PNG в GD
 
 автор: n1ko   (07.01.2013 в 12:19)   письмо автору
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$resizedImage0000$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($newImageNormalWORKS '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>

  Ответить  
 
 автор: n1ko   (07.01.2013 в 12:21)   письмо автору
978.1 Кб
 
   для: n1ko   (07.01.2013 в 12:19)
 

А это оригинал

  Ответить  
 
 автор: elenaki   (07.01.2013 в 13:49)   письмо автору
 
   для: n1ko   (07.01.2013 в 12:21)
 

зачем делать png на непрозрачном фоне?

  Ответить  
 
 автор: n1ko   (07.01.2013 в 14:48)   письмо автору
 
   для: elenaki   (07.01.2013 в 13:49)
 

Это никак вопрос не решит. Хоть на зелёном, на белом или прозрачном. Это вообще фотографии, просто в png формате.

  Ответить  
 
 автор: elenaki   (07.01.2013 в 15:02)   письмо автору
 
   для: n1ko   (07.01.2013 в 14:48)
 

фотографии делают в jpg. я лично всегда переделываю png в jpg, если нет прозрачности.

  Ответить  
 
 автор: n1ko   (07.01.2013 в 15:19)   письмо автору
 
   для: elenaki   (07.01.2013 в 15:02)
 

Оружие раньше тоже было только острым. а теперь ещё и стреляет)

Необходимо png и я обратился с вопросом про ужасную потерю качества. А Вы начали никчёмные теории о расширении фото.
Полупрозрачный водяной знак я тоже в jpg буду накладывать?!!
А качество нужно отличное, без потерь

  Ответить  
 
 автор: elenaki   (07.01.2013 в 15:27)   письмо автору
 
   для: n1ko   (07.01.2013 в 15:19)
 

а чего тогда жалуемся на качество? я про прозрачность и ПОЛУпрозрачность не говорила. на
фотках ничего прозрачного нет. не умеешь пользоваться инструментом - не берись.

  Ответить  
 
 автор: n1ko   (07.01.2013 в 15:30)   письмо автору
 
   для: elenaki   (07.01.2013 в 15:27)
 

А где я написал и продемонстрировал полупрозрачный исходный графический файл?!!
Уважаемая, складывайте мои слова последовательно, а не снизу вверх и по кускам.

Мне необходим файл в PNG и точка! Раз на то пошло, то успокою Ваше самолюбие и сообщу, что файл из JPG в JPG ужимая, я получаю тот же результат, за исключением нескольких пикселей. Хотя ставлю качество 100%.

А про "умеешь - не умеешь" прошу не говорить. Вы особо тоже не сказали, как исправить ситуацию.

  Ответить  
 
 автор: Sfinks   (10.01.2013 в 00:51)   письмо автору
 
   для: n1ko   (07.01.2013 в 12:21)
 

Какая версия php?
Начиная с версии 5.1.2 добавлен 3ий аргумент функции imagepng - степень сжатия - целое число от 0 (нет сжатия) до 9.
Попробуйте разные варианты.

  Ответить  
 
 автор: n1ko   (10.01.2013 в 01:49)   письмо автору
 
   для: Sfinks   (10.01.2013 в 00:51)
 

Эксперементировал - дело в функции "imagecreate". Внизу адекватный ответ дали )...

  Ответить  
 
 автор: Sfinks   (10.01.2013 в 08:40)   письмо автору
 
   для: n1ko   (10.01.2013 в 01:49)
 

Да, я уж потом увидел.

  Ответить  
 
 автор: n1ko   (07.01.2013 в 12:30)   письмо автору
 
   для: n1ko   (07.01.2013 в 12:19)
 

Или вот. В ФотоШопе сделал PNG картинку.
Оригинал: http://natti-moda.ru/tmp/ba29ba75703c058fff94c75274f0085f_84e34d84884aa57d0f2125666c69b607.png
То, что получилось: http://natti-moda.ru/works/normal/ba29ba75703c058fff94c75274f0085f_84e34d84884aa57d0f2125666c69b607.png

  Ответить  
 
 автор: cheops   (07.01.2013 в 13:34)   письмо автору
 
   для: n1ko   (07.01.2013 в 12:19)
 

В функции imagepng() добавьте третий параметр - 0, посмотрите, не изменится ли результат.

  Ответить  
 
 автор: n1ko   (07.01.2013 в 14:50)   письмо автору
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 в 15:40)   письмо автору
 
   для: n1ko   (07.01.2013 в 12:19)
 

Предлагаю закрыть тему, ибо тут больше споров, чем решений)
А я нашёл другой выход, никак не относящийся к php

  Ответить  
 
 автор: Drago   (07.01.2013 в 18:50)   письмо автору
 
   для: n1ko   (07.01.2013 в 15:40)
 

Для создания уменьшенного изображения, вы используете функцию imagecreate(). Эта функция поддерживает только 256 цветов. Чтобы создать полноцветное изображение, следует использовать функцию imagecreatetruecolor().

  Ответить  
 
 автор: n1ko   (09.01.2013 в 22:01)   письмо автору
 
   для: Drago   (07.01.2013 в 18:50)
 

Спасибо! Самый лучший ответ, жаль оценить нельзя! Никаких встречных вопросов и притензий, а лишь ответ, что и как) СПАСИБО)

Испытаю - отвечу...)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования