|
|
|
|
|
для: zorg84
(11.06.2012 в 00:15)
| | Еще раз. JPEG формат, как и другие форматы сжатия изображений (а это касается и видео, и аудио кодеков) работают просто говоря по принципу "выбросить лишнее, но так, что это не помешает конечному восприятию". А что будет выбрасываться зависит от изображения/звука, то есть в изображении это цвет, плавность его переходов, в видео это неизменяемые во времени части кадра (изображения), и т.п.
Перевернутое на 180 градусов изображение, это просто копия верхних его пикселей вниз, и с упорядочиванием их справа налево. Такая операция к увеличению размеров никак не приведет. Но при сжатии для кодека уже будет иная картина, и может увеличиться размер (если говорить о той же степени качества как и у исходного), а может и нет. Но если вы будете сохранять без потери качества (в случае с JPEG, третий аргумент функции равен 100), то вы сохраните уже несжатое изображение, то есть то, что занимают его размеры помноженные на его разрешение. А это в 2-3 раза больший размер будет нежели у исходного, при этом качество не улучшится, так как вы открывали уже сжатое изображение, просто не произойдет повторного сжатия.
Сохраняйте с качеством 80-85, в общем поищите компромисс между размером и качеством. | |
|
|
|
|
|
|
|
для: confirm
(11.06.2012 в 00:10)
| | не пойму тогда почему после каждого водоворота фото и сохранения, размер фото увеличивается | |
|
|
|
|
|
|
|
для: zorg84
(10.06.2012 в 23:54)
| | >получается что после каждого пересохранения фото размер фото увеличивается ?
Нет конечно.
Чтобы понять причины потери качества в JPEG, прочтите в сети об этом формате и о его недостатках. А увеличится, если вы сохраните файл с более высоким качеством (с меньшим сжатием). Думаю о MP3, MPEG2 и прочих медиаформатах вы знаете, и для чего они служат. Вот тоже самое JPEG - лучшее качество, значит больший размер.
>А как интересно в контакте поворот фото работает?
Не знаю и знать не хочу. Но если используется GD, то точно также как делаете и вы. Поворот не влияет на качество, у вас он 180 градусов, влияет формат сохранения самого файла (и выдачи в браузер тоже). | |
|
|
|
|
|
|
|
для: confirm
(10.06.2012 в 23:07)
| | получается что после каждого пересохранения фото размер фото увеличивается ?
А как интересно в контакте поворот фото работает? | |
|
|
|
|
|
|
|
для: zorg84
(10.06.2012 в 22:54)
| | Потому, что при сохранении в формате JPEG всегда происходит повторное сжатие уже ранее сжатого, отсюда и потери качества. По умолчанию (без указания третьего аргумента) эта функция при сохранении сжимает с качеством 75%. Вы можете указать 100%, то есть не терять в качестве, но проиграете в размере, который увеличится. Можете хранить в PNG формате, меньшие потери качества будут, но размер будет больший чем у JPEG (зависит от содержимого изображения). | |
|
|
|
|
|
|
|
для: confirm
(10.06.2012 в 00:20)
| | всё работает но почему качество после поворота фото ухудшается ? и как обойти потерю если это возможно | |
|
|
|
|
|
|
|
для: zorg84
(10.06.2012 в 00:00)
| |
<?
$source = imagecreatefromjpeg($filename);
// Поворот
$source = imagerotate($source, $degrees, 0);
// Вывод
imagejpeg($source);
//Замена
imagejpeg($source,'test.jpg');
|
PS. $filename у вас, это переменная хранящая имя файла на диске, а не создаваемый ресурс GD, и для нее imagedestroy ($filename) пустой звук. В вашем коде нужно высвобождать память ресурсов $source и $rotate, или только $source как у меня, так как явно я не создаю второго ресурса. | |
|
|
|
|
|
|
| есть скрипт поворота изображения мне надо заменить оригинальное фото $filename = 'test.jpg'; на фото обработано скриптом. Как сделать?
<?php
// Файл и угол поворота
$filename = 'test.jpg';
$degrees = 180;
// Тип содержимого
header('Content-type: image/jpeg');
// Загрузка изображения
$source = imagecreatefromjpeg($filename);
// Поворот
$rotate = imagerotate($source, $degrees, 0);
// Вывод
imagejpeg($rotate);
//Уничтожаем изображение в памяти
imagedestroy ($filename);
imagedestroy($rotate);
?>
|
| |
|
|
|
|