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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поворот изображения

Сообщения:  [1-8] 

 
 автор: confirm   (11.06.2012 в 00:41)   письмо автору
 
   для: zorg84   (11.06.2012 в 00:15)
 

Еще раз. JPEG формат, как и другие форматы сжатия изображений (а это касается и видео, и аудио кодеков) работают просто говоря по принципу "выбросить лишнее, но так, что это не помешает конечному восприятию". А что будет выбрасываться зависит от изображения/звука, то есть в изображении это цвет, плавность его переходов, в видео это неизменяемые во времени части кадра (изображения), и т.п.

Перевернутое на 180 градусов изображение, это просто копия верхних его пикселей вниз, и с упорядочиванием их справа налево. Такая операция к увеличению размеров никак не приведет. Но при сжатии для кодека уже будет иная картина, и может увеличиться размер (если говорить о той же степени качества как и у исходного), а может и нет. Но если вы будете сохранять без потери качества (в случае с JPEG, третий аргумент функции равен 100), то вы сохраните уже несжатое изображение, то есть то, что занимают его размеры помноженные на его разрешение. А это в 2-3 раза больший размер будет нежели у исходного, при этом качество не улучшится, так как вы открывали уже сжатое изображение, просто не произойдет повторного сжатия.

Сохраняйте с качеством 80-85, в общем поищите компромисс между размером и качеством.

  Ответить  
 
 автор: zorg84   (11.06.2012 в 00:15)   письмо автору
 
   для: confirm   (11.06.2012 в 00:10)
 

не пойму тогда почему после каждого водоворота фото и сохранения, размер фото увеличивается

  Ответить  
 
 автор: confirm   (11.06.2012 в 00:10)   письмо автору
 
   для: zorg84   (10.06.2012 в 23:54)
 

>получается что после каждого пересохранения фото размер фото увеличивается ?

Нет конечно.

Чтобы понять причины потери качества в JPEG, прочтите в сети об этом формате и о его недостатках. А увеличится, если вы сохраните файл с более высоким качеством (с меньшим сжатием). Думаю о MP3, MPEG2 и прочих медиаформатах вы знаете, и для чего они служат. Вот тоже самое JPEG - лучшее качество, значит больший размер.

>А как интересно в контакте поворот фото работает?

Не знаю и знать не хочу. Но если используется GD, то точно также как делаете и вы. Поворот не влияет на качество, у вас он 180 градусов, влияет формат сохранения самого файла (и выдачи в браузер тоже).

  Ответить  
 
 автор: zorg84   (10.06.2012 в 23:54)   письмо автору
 
   для: confirm   (10.06.2012 в 23:07)
 

получается что после каждого пересохранения фото размер фото увеличивается ?
А как интересно в контакте поворот фото работает?

  Ответить  
 
 автор: confirm   (10.06.2012 в 23:07)   письмо автору
 
   для: zorg84   (10.06.2012 в 22:54)
 

Потому, что при сохранении в формате JPEG всегда происходит повторное сжатие уже ранее сжатого, отсюда и потери качества. По умолчанию (без указания третьего аргумента) эта функция при сохранении сжимает с качеством 75%. Вы можете указать 100%, то есть не терять в качестве, но проиграете в размере, который увеличится. Можете хранить в PNG формате, меньшие потери качества будут, но размер будет больший чем у JPEG (зависит от содержимого изображения).

  Ответить  
 
 автор: zorg84   (10.06.2012 в 22:54)   письмо автору
 
   для: confirm   (10.06.2012 в 00:20)
 

всё работает но почему качество после поворота фото ухудшается ? и как обойти потерю если это возможно

  Ответить  
 
 автор: confirm   (10.06.2012 в 00:20)   письмо автору
 
   для: zorg84   (10.06.2012 в 00:00)
 

<?
$source 
imagecreatefromjpeg($filename); 
// Поворот 
$source imagerotate($source$degrees0); 
// Вывод 
imagejpeg($source); 
//Замена
imagejpeg($source,'test.jpg');

PS. $filename у вас, это переменная хранящая имя файла на диске, а не создаваемый ресурс GD, и для нее imagedestroy ($filename) пустой звук. В вашем коде нужно высвобождать память ресурсов $source и $rotate, или только $source как у меня, так как явно я не создаю второго ресурса.

  Ответить  
 
 автор: zorg84   (10.06.2012 в 00:00)   письмо автору
 
 

есть скрипт поворота изображения мне надо заменить оригинальное фото $filename = 'test.jpg'; на фото обработано скриптом. Как сделать?
<?php
// Файл и угол поворота
$filename 'test.jpg';
$degrees 180;

// Тип содержимого
header('Content-type: image/jpeg');

// Загрузка изображения
$source imagecreatefromjpeg($filename);

// Поворот
$rotate imagerotate($source$degrees0);

// Вывод
 
imagejpeg($rotate);

//Уничтожаем изображение в памяти
 
imagedestroy ($filename);
 
imagedestroy($rotate);
?>

  Ответить  

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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