Обработка фотографий, Для выкладывания на ЯПлакал

Страницы: 1 2  ... 4  ОТВЕТИТЬ НОВАЯ ТЕМА
dlrex 13 сен 2014 в 17:08
Инженегр  •  На сайте 12 лет
Сообщений: 10 675
51
Всегда хотел хотел автоматизировать процесс преобразования фотографий для постинга на ЯПе. А то переделывать их в Фотошопе нудно и долго. И вот я поборол лень. И в честь Дня Программиста я СДЕЛАЛ ЭТО!!! star.gif brake.gif star.gif

Будет код на PHP (да, да! Я быдлоПХПкодер smile.gif ), лог работы программы и 2 картинки (итоги работы скрипта).

Код

#!/usr/local/bin/php
<?

// Скрипт для преобразования фотографий 4000х3000х24 JPG
// в 1280х960х24 JPG "весом" до 500Кб. Преднозначен для подготовки
// фотографий для публикации на сайте ЯПлакал.
// 13.09.2014 (c) Крюков Алексей aka DLRex.

// P.S. Для правильной работы скрипта нужен PHP 5.3, GD 2.0.1 или выше.

$tb=microtime(true);       //  Запоминает текущее время. Чтоб узнать сколько скрипт работал.

$ptn = __DIR__ . "/photo/";     // Путь к папке с фотографиями.

$i=0; $w=0; $h=0;     // Счетчики обработанных фотографий. Всего, горизонтальных, вертикальных.

if ( $handle = opendir($ptn) )     // Открываем папку. Если не откроется - выходим из программы
{
 while(false!==($file=readdir($handle)))   // Читаем файлы в папке. Пока не кончатся
 {
   if ($file!="." && $file!="..")    // А это обрабатывать небудем. Ну и лишних файлов и папок там быть не должно!!!
   {
     $fsz = round(filesize("$ptn"."$file") / 1024,0);  // Узнаём размер фотографии в Килобайтах
     
     print "$i. $file $fsz"."K,";   // Выводим номер файла, имя, объём (в Килобайтах)  
               
     list($iw,$ih) = getimagesize ("$ptn"."$file");    // узнаём разрешение фотографии. Тут нужно только для
                 // того что бы узнать горизонтальная или вертикальная фотография.
     print " width=$iw, height=$ih,";          // Выводим габариты на экран.
     
     if ($iw == 4000) {$w++; print " альбомная,";      // Выводим ориентацию файла;)
                       $idw=1280;$idh=960;}      // и задаём разрешения новой фотки
                 else {$h++; print " книжная,";        // 1280х960 или 960х1280
                       $iw=3000;$ih=4000;
                       $idw=960;$idh=1280;      
                       };                              // увеличиваем соответствующий счётчик альбомных или книжных фоток
     
     
     
     $rsk = 101;  // Счетчик качества сжатия изменённой фотки
     
   do {
     $rsk--;     // Уменьшаем его
     $imgdsc = imagecreatetruecolor($idw,$idh);           // Создаём канву для новой фотки заданного размера
     $imgsrc = imagecreatefromjpeg("photo/"."$file");     // Открываем исходную фотографию
     imagecopyresampled($imgdsc,$imgsrc,0,0,0,0,$idw,$idh,$iw,$ih); // ресайзиинг фотки
     imagejpeg($imgdsc,__DIR__."/res/".$file,$rsk);       // Сохраняем получившийся файл в папку res
     imagedestroy($imgdsc); imagedestroy($imgsrc);        // Освобождаем память
     
     $fsz = round(filesize(__DIR__."/res/"."$file") / 1024,0);  // Вычисляем размер получившегося файла в килобайтах.
   
     if ($rsk<1) {break;};                               // Если качество фотки 0, то выход из цикла. Такое конечно  почти не возможно :)
     
     if ($fsz > 500) {unlink(__DIR__."/res/"."$file");}; // Если больше 500Кб файл, то удаляем его. Без этого fileresize
                                                          // выдаёт первое значение и цикл не закончится
           
   } while ($fsz > 500);   // Уменьшаем качество фотки пока меньше 500Кб не получится
     
     print " результат: width: $idw, heigth: $idh, объём: $fsz"."Kb, сжатие: $rsk"."% \r\n"; // Выводим результат
     
    $i++; // инкремент счетчика файлов
   }
 }
closedir($handle);  // закрываем папку
}

$te = microtime(true);   // Вычисляем сколько работал скрипт.
$te = round ($te-$tb,3); // Округлим до тысячных секунды.

print "\r\nВсего обработано $i файлов (альбомных: $w, книжных: $h) за $te сек.\r\n";

?>

Yap 30.04.2026 - 05:55
Продам слона  •  На сайте 21 год
Все комментарии:
dlrex автор 13 сен 2014 в 17:10
Инженегр  •  На сайте 12 лет
0
Часть лога:
Код

41. DSC00551.JPG 4329K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 448Kb, сжатие: 97%
42. DSC00552.JPG 4614K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 447Kb, сжатие: 96%
43. DSC00553.JPG 4385K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 465Kb, сжатие: 97%
44. DSC00554.JPG 4325K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 479Kb, сжатие: 98%
45. DSC00555.JPG 4409K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 456Kb, сжатие: 97%
46. DSC00556.JPG 4277K, width=4000, height=3000, альбомная, результат: width: 1280, heigth: 960, объём: 491Kb, сжатие: 98%

Всего обработано 47 файлов (альбомных: 44, книжных: 3) за 365.126 сек.

dlrex автор 13 сен 2014 в 17:11
Инженегр  •  На сайте 12 лет
0
книжный формат:

Обработка фотографий
dlrex автор 13 сен 2014 в 17:11
Инженегр  •  На сайте 12 лет
0
альбомная:

Обработка фотографий
Kibalchish00 13 сен 2014 в 17:13
Психический  •  На сайте 11 лет
6
Если будет все работать я ТСу ящик пива отправлю
dlrex автор 13 сен 2014 в 17:13
Инженегр  •  На сайте 12 лет
5
Следующий скрипт будет для автоматизации постинга фоток и комментов к ним на ЯП.

У меня все. Кому надо - пользуйтесь. Скрипт был написан под мои фотки. Но под другое легко переделать.

Пы.Сы. С праздником программеры!!!

Пы.Пы.Сы. Этим скриптом обработал фотки из музея Калашникова и музея завода ИжМаш. Скоро выложу.

Это сообщение отредактировал dlrex - 13 сен 2014 в 17:37
28e 13 сен 2014 в 17:13
Ярила  •  На сайте 14 лет
10
Настоящий php-программист замутит свой ресурс в виде простой странички с одной формой, куда отправляется фотография и пережимается в меньшее разрешение. И без рекламы, если он не мудаг :)

А скрипт просто так никому не нужен, тут даже батник запустить у многих проблема
dlrex автор 13 сен 2014 в 17:14
Инженегр  •  На сайте 12 лет
6
Цитата (Kibalchish00 @ 13.09.2014 - 18:13)
Если будет все работать я ТСу ящик пива отправлю

работает. Лог и примеры есть smile.gif Пиво не пью, а вот от кваса не откажусь beer.gif
zemskovpress 13 сен 2014 в 17:14
папуасю  •  На сайте 13 лет
3
а я пейнтом пережимаю. Открываю в пейнте фотку, жму сtrl+w, в появившемся окошке ставлю значения по 30. Затем нажимаю ctrl+s. профит!
dlrex автор 13 сен 2014 в 17:16
Инженегр  •  На сайте 12 лет
1
Цитата (zemskovpress @ 13.09.2014 - 18:14)
а я пейнтом пережимаю. Открываю в пейнте фотку, жму сtrl+w, в появившемся окошке ставлю значения по 30. Затем нажимаю ctrl+s. профит!

Скрипт делает это быстро и без вашего участия.
Kibalchish00 13 сен 2014 в 17:16
Психический  •  На сайте 11 лет
2
Цитата (dlrex @ 13.09.2014 - 18:14)
Цитата (Kibalchish00 @ 13.09.2014 - 18:13)
Если будет все работать я ТСу ящик пива отправлю

работает. Лог и примеры есть smile.gif Пиво не пью, а вот от кваса не откажусь beer.gif

Это самому надо что-то делать? Я нубяра дикий, я думал что будет на автомате.

В квасах не разбираюсь, в следующем месяце буду в Ижевске, может встретимся и расскажешь про квасы.
nisse 13 сен 2014 в 17:17
Хохмач  •  На сайте 14 лет
5
Боюсь спросить а то погоните поганой метлой бездарного юзера lamo.gif
Что нужно сделать чтобы это заработало?
Sunray 13 сен 2014 в 17:18
Ч Е Л О В Е К  •  На сайте 16 лет
3
в чем проблема открыть Microsoft Picture Manager и массово обработать фотки?ведь офис почти у каждого стоит на пк и этот редактор изображение в комплекте...массово выделил изменить размер и нажал ОК...
dlrex автор 13 сен 2014 в 17:18
Инженегр  •  На сайте 12 лет
2
Цитата (28e @ 13.09.2014 - 18:13)
Настоящий php-программист замутит свой ресурс в виде простой странички с одной формой, куда отправляется фотография и пережимается в меньшее разрешение. И без рекламы, если он не мудаг :)

А скрипт просто так никому не нужен, тут даже батник запустить у многих проблема

Ну да... статья не очень форматная. На Хабре была б уместнее, но там и так полно спецов.

Пы.Сы. Просто хвастаюсь smile.gif

Добавлено в 17:20
Цитата (Sunray @ 13.09.2014 - 18:18)
в чем проблема открыть Microsoft Picture Manager и массово обработать фотки?ведь офис почти у каждого стоит на пк и этот редактор изображение в комплекте...массово выделил изменить размер и нажал ОК...

Размеры многие проги меняют. Но не все сразу и объём их ограничивают.

Добавлено в 17:21
Цитата (nisse @ 13.09.2014 - 18:17)
Боюсь спросить а то погоните поганой метлой бездарного юзера lamo.gif
Что нужно сделать чтобы это заработало?

Установить PHP и библиотеки его. Я это делал на сервере с FreeBSD. Просто взял что было ближе и удобнее для меня.

Это сообщение отредактировал dlrex - 13 сен 2014 в 17:21
еlCoyote 13 сен 2014 в 17:22
Хохмач  •  На сайте 11 лет
1
Цитата (dlrex @ 13.09.2014 - 17:18)
...Просто хвастаюсь smile.gif

Ну так похвастался б как этот код юзать, с подробностями cool.gif
Kibalchish00 13 сен 2014 в 17:23
Психический  •  На сайте 11 лет
0
Цитата (dlrex @ 13.09.2014 - 18:18)
Размеры многие проги меняют. Но не все сразу и объём их ограничивают.

Ага,я в пейнте по 3-4 раза порой обрезаю.
nisse 13 сен 2014 в 17:24
Хохмач  •  На сайте 14 лет
12
Цитата
Установить PHP и библиотеки его. Я это делал на сервере с FreeBSD. Просто взял что было ближе и удобнее для меня.


Ну да,как я сразу не догадался)) upset.gif
dlrex автор 13 сен 2014 в 17:25
Инженегр  •  На сайте 12 лет
0
Цитата (Kibalchish00 @ 13.09.2014 - 18:16)
Цитата (dlrex @ 13.09.2014 - 18:14)
Цитата (Kibalchish00 @ 13.09.2014 - 18:13)
Если будет все работать я ТСу ящик пива отправлю

работает. Лог и примеры есть smile.gif Пиво не пью, а вот от кваса не откажусь beer.gif

Это самому надо что-то делать? Я нубяра дикий, я думал что будет на автомате.

В квасах не разбираюсь, в следующем месяце буду в Ижевске, может встретимся и расскажешь про квасы.

Да ладно, на квас не претендую. Инструкция: В папку photo помещаем фотки, в папку res - идут результаты. Просто запускаем скрипт и автоматом все делается. ~50 фоток за 6 минут. В фотошопе адаптировать для вэб - часа 1.5 - 2 надо.
pYpS 13 сен 2014 в 17:25
Весельчак  •  На сайте 13 лет
1
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

Это сообщение отредактировал pYpS - 13 сен 2014 в 17:26
PaSquirrel 13 сен 2014 в 17:29
Ярила  •  На сайте 12 лет
2
махонький совет.
Не делайте вот такие конструкции

if успех{
if успех{
if успех{
if успех{
что-то сделать.
else{ошибка}
else{ошибка}
else{ошибка}
else{ошибка}

такой код сложно читать.

лучше так :
if ошибка1 {ошибка выходим из программы}
if ошибка2 {ошибка выходим из программы}
if ошибка3 {ошибка выходим из программы}
if ошибка4 {ошибка выходим из программы}
действие, если ни одна из проверок не сработала.

а так - да, рабочее решение, писал нечто подобное только в связке с питоноом для одного проекта - перегонка картинок и перегонка пдф в картинки.



dlrex автор 13 сен 2014 в 17:30
Инженегр  •  На сайте 12 лет
0
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

Слышал я о компиляторах ПХП, но сам не пользовался. Так интерпретаторами только. Установка ПХП - это отдельная статья. Их много в инете. Можно найти. Есть и под Виндовс. Рекомендую Денвер. http://www.denwer.ru/
PaSquirrel 13 сен 2014 в 17:30
Ярила  •  На сайте 12 лет
1
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

это скриптовый язык - он не компилируется. Точнее можно - но это уже бредор -)
dlrex автор 13 сен 2014 в 17:32
Инженегр  •  На сайте 12 лет
0
Цитата (PaSquirrel @ 13.09.2014 - 18:29)
махонький совет.
Не делайте вот такие конструкции

if успех{
if успех{
if успех{
if успех{
что-то сделать.
else{ошибка}
else{ошибка}
else{ошибка}
else{ошибка}

такой код сложно читать.

лучше так :
if ошибка1 {ошибка выходим из программы}
if ошибка2 {ошибка выходим из программы}
if ошибка3 {ошибка выходим из программы}
if ошибка4 {ошибка выходим из программы}
действие, если ни одна из проверок не сработала.

а так - да, рабочее решение, писал нечто подобное только в связке с питоноом для одного проекта - перегонка картинок и перегонка пдф в картинки.

Ок. Буду так делать. Я так-то по образованию. электронщик wub.gif
SESHOK 13 сен 2014 в 17:32
Великий Визирь  •  На сайте 12 лет
1
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

А я вот кирпичную кладку любой сложности сделаю, а это...
Расскажите просто и доступно, как все это применить, я способный, я пойму! cheer.gif
PaSquirrel 13 сен 2014 в 17:32
Ярила  •  На сайте 12 лет
0
Цитата (dlrex @ 13.09.2014 - 18:32)
Цитата (PaSquirrel @ 13.09.2014 - 18:29)
махонький совет.
Не делайте вот такие конструкции

if успех{
            if успех{
                        if успех{
                                    if успех{
                                                что-то сделать.
else{ошибка}
      else{ошибка}
            else{ошибка}
                  else{ошибка}

такой код сложно читать.

лучше так :
if ошибка1 {ошибка выходим из программы}
if ошибка2 {ошибка выходим из программы}
if ошибка3 {ошибка выходим из программы}
if ошибка4 {ошибка выходим из программы}
действие, если ни одна из проверок не сработала.

а так - да, рабочее решение, писал нечто подобное  только в связке с питоноом для одного проекта - перегонка картинок и перегонка пдф в картинки.

Ок. Буду так делать. Я так-то по образованию. электронщик wub.gif

а я вообще недопсихолог -) Но работаю в том же направлении -)
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 7 292
0 Пользователей:
Страницы: 1 2  ... 4  ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

Активные темы



Наверх