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

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (4) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
dlrex
13.09.2014 - 17:08
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
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
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
dlrex
13.09.2014 - 17:10
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Часть лога:
Код

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.09.2014 - 17:11
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
книжный формат:

Обработка фотографий
 
[^]
dlrex
13.09.2014 - 17:11
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
альбомная:

Обработка фотографий
 
[^]
Kibalchish00
13.09.2014 - 17:13
6
Статус: Offline


Психический

Регистрация: 5.06.14
Сообщений: 1112
Если будет все работать я ТСу ящик пива отправлю
 
[^]
dlrex
13.09.2014 - 17:13
5
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Следующий скрипт будет для автоматизации постинга фоток и комментов к ним на ЯП.

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

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

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

Это сообщение отредактировал dlrex - 13.09.2014 - 17:37
 
[^]
28e
13.09.2014 - 17:13
10
Статус: Offline


Ярила

Регистрация: 19.02.12
Сообщений: 9704
Настоящий php-программист замутит свой ресурс в виде простой странички с одной формой, куда отправляется фотография и пережимается в меньшее разрешение. И без рекламы, если он не мудаг :)

А скрипт просто так никому не нужен, тут даже батник запустить у многих проблема
 
[^]
dlrex
13.09.2014 - 17:14
6
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (Kibalchish00 @ 13.09.2014 - 18:13)
Если будет все работать я ТСу ящик пива отправлю

работает. Лог и примеры есть smile.gif Пиво не пью, а вот от кваса не откажусь beer.gif
 
[^]
zemskovpress
13.09.2014 - 17:14
3
Статус: Offline


папуасю

Регистрация: 5.08.12
Сообщений: 1185
а я пейнтом пережимаю. Открываю в пейнте фотку, жму сtrl+w, в появившемся окошке ставлю значения по 30. Затем нажимаю ctrl+s. профит!
 
[^]
dlrex
13.09.2014 - 17:16
1
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (zemskovpress @ 13.09.2014 - 18:14)
а я пейнтом пережимаю. Открываю в пейнте фотку, жму сtrl+w, в появившемся окошке ставлю значения по 30. Затем нажимаю ctrl+s. профит!

Скрипт делает это быстро и без вашего участия.
 
[^]
Kibalchish00
13.09.2014 - 17:16
2
Статус: Offline


Психический

Регистрация: 5.06.14
Сообщений: 1112
Цитата (dlrex @ 13.09.2014 - 18:14)
Цитата (Kibalchish00 @ 13.09.2014 - 18:13)
Если будет все работать я ТСу ящик пива отправлю

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

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

В квасах не разбираюсь, в следующем месяце буду в Ижевске, может встретимся и расскажешь про квасы.
 
[^]
nisse
13.09.2014 - 17:17
5
Статус: Offline


Хохмач

Регистрация: 24.12.11
Сообщений: 656
Боюсь спросить а то погоните поганой метлой бездарного юзера lamo.gif
Что нужно сделать чтобы это заработало?
 
[^]
Sunray
13.09.2014 - 17:18
3
Статус: Offline


Ч Е Л О В Е К

Регистрация: 23.11.09
Сообщений: 10280
в чем проблема открыть Microsoft Picture Manager и массово обработать фотки?ведь офис почти у каждого стоит на пк и этот редактор изображение в комплекте...массово выделил изменить размер и нажал ОК...
 
[^]
dlrex
13.09.2014 - 17:18
2
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (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.09.2014 - 17:21
 
[^]
еlCoyote
13.09.2014 - 17:22
1
Статус: Offline


Хохмач

Регистрация: 30.05.14
Сообщений: 622
Цитата (dlrex @ 13.09.2014 - 17:18)
...Просто хвастаюсь smile.gif

Ну так похвастался б как этот код юзать, с подробностями cool.gif
 
[^]
Kibalchish00
13.09.2014 - 17:23
0
Статус: Offline


Психический

Регистрация: 5.06.14
Сообщений: 1112
Цитата (dlrex @ 13.09.2014 - 18:18)
Размеры многие проги меняют. Но не все сразу и объём их ограничивают.

Ага,я в пейнте по 3-4 раза порой обрезаю.
 
[^]
nisse
13.09.2014 - 17:24
12
Статус: Offline


Хохмач

Регистрация: 24.12.11
Сообщений: 656
Цитата
Установить PHP и библиотеки его. Я это делал на сервере с FreeBSD. Просто взял что было ближе и удобнее для меня.


Ну да,как я сразу не догадался)) upset.gif
 
[^]
dlrex
13.09.2014 - 17:25
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (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.09.2014 - 17:25
1
Статус: Offline


Весельчак

Регистрация: 26.08.12
Сообщений: 196
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

Это сообщение отредактировал pYpS - 13.09.2014 - 17:26
 
[^]
PaSquirrel
13.09.2014 - 17:29
2
Статус: Offline


Ярила

Регистрация: 6.03.14
Сообщений: 15056
махонький совет.
Не делайте вот такие конструкции

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

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

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

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



 
[^]
dlrex
13.09.2014 - 17:30
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

Слышал я о компиляторах ПХП, но сам не пользовался. Так интерпретаторами только. Установка ПХП - это отдельная статья. Их много в инете. Можно найти. Есть и под Виндовс. Рекомендую Денвер. http://www.denwer.ru/
 
[^]
PaSquirrel
13.09.2014 - 17:30
1
Статус: Offline


Ярила

Регистрация: 6.03.14
Сообщений: 15056
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

это скриптовый язык - он не компилируется. Точнее можно - но это уже бредор -)
 
[^]
dlrex
13.09.2014 - 17:32
0
Статус: Offline


Инженегр

Регистрация: 24.11.13
Сообщений: 10257
Цитата (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.09.2014 - 17:32
1
Статус: Offline


Великий Визирь

Регистрация: 28.07.13
Сообщений: 367539
Цитата (pYpS @ 13.09.2014 - 18:25)
Вы конечно охуенны товарищи, а скомпилировать для простого люда можете? Я вот только бейсик знаю, пхп не не видал

А я вот кирпичную кладку любой сложности сделаю, а это...
Расскажите просто и доступно, как все это применить, я способный, я пойму! cheer.gif
 
[^]
PaSquirrel
13.09.2014 - 17:32
0
Статус: Offline


Ярила

Регистрация: 6.03.14
Сообщений: 15056
Цитата (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

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


 
 



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






Наверх