Русское сообщество AutoIt

  • Май 22, 2012, 14:20:18 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Открыт новый раздел Полезняшки - Полезные решения, функции и скрипты в помощь кодеру

:Typing:

Реклама

Автор Тема: Разработка GUI для проекта по оптимизации изображений без потери качества  (Прочитано 1157 раз)

0 Пользователей и 1 Гость смотрят эту тему.

lorents [?]

  • Новичок
  • *
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Добрый день!
У меня есть проект Image Catalyst, суть проект в оптимизации картинок без потери качества

технология описана здесь (статья моя)
http://habrahabr.ru/blogs/client_side_optimization/119009/

Хотелось бы сделать GUI для проект, но знаний пока таких нету, решил обратится, может у кого есть желание мне помочь? Сам проект будет бесплатными, конкурентов мало, мой алгоритм оптимизации наголову превосходит. Из GUI конкурентов двое:
PNGOutWin (платный);
PNGGauntlet.

Основные требования к приложению:
1. запретить одновременную работу более одной копии проекта;
2. сделать многопоточность при оптимизации PNG изображений;

Этапы оптимизации изображений
1. изображение копируется во временную папку
2. запускаем алгоритм оптимизации изображений (более подробно я напишу позже);
3. если размер оптимизированного изображения меньше оригинального, то (в зависимости от настроек приложения):
* заменяем оригинальное изображение на оптимизированное;
* сохраняем оптимизированное/оригинальное изображение в указанную папку.
4. добавляем сведения о проделанной работе в объект TreeList.



Работа с папками
1. при добавлении папок с изображения делаем поиск изображений (в зависимости от настроек приложения):
* поиск изображений ведется только в указанной папке;
* поиск изображений ведется в казанной папке, включая вложенные подпапки.
2. полученная структура отображается в объекте TreeList.
Пример 1:
Пользователь указал оптимизировать изображения в папке Dir1, включая вложенные папки, в папке Dir1 есть папки Dir2 и Dir3. Следовательно, в объекте TreeList указываем папку Dir1 и подпапки Dir2 и Dir3
3. если пользователь указал сохранять оптимизированные изображения в другой папке, то воссоздается и вся структура папок.
Пример 2:
Продолжение примера 1. Допустим, пользователь указал сохранять оптимизированные изображения в папке Images. Следовательно, в папке Images создается папка Dir1 и подпапки Dir2 и Dir3 и в них помещаются оптимизированные изображения.
Если в папке Images уже существует папка Dir1, то мы создаем папку Dir1 (1), и так далее.
При совпадении имен файлов действуем в том же направлении.

Меню проекта
File
* File add
* Folder add
* -------------
* Exit
Actions
* Start
* Stop
Tools
* Options
Help
* Help
* Check for Update
* About

File add
Открывается диалоговое окно выбора файлов с возможностью выбора нескольких файлов



В строке тип файла указывается
* File PNG (*.png)
* File JPEG (*.jpg, *.jpeg, *.jpe)
* All supported File (*.png, *.jpg, *.jpeg, *.jpe)

Folder add
Открывается диалоговое окно выбора папки



Exit
Выход из приложения

Start
Запускается процесс оптимизации изображения, примет все пункты меню блокируются за исключением Pause и Stop

Stop
Процесс оптимизации изображений отключается, при этом:
* новые файлы не отправляются в работу;
* принудительно завершаем запущенные процессы;
* чистим временную папку.

Options
Три основные вкладки (более подробно я напишу позже):
* настройки самого приложения;
* настройки оптимизации PNG;
* настройки оптимизации JPEG.

Help
Запускается справка приложения

Check for Update
Проверяется наличие обновления

About
О приложении (версия, сайт, авторы и т.д.)
 
« Последнее редактирование: Февраль 11, 2012, 23:47:00 от lorents »



  Записан
Image Catalyst - оптимизация изображений без потери качества

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Image Catalyst
« Ответ #1, Отправлен: Февраль 11, 2012, 10:09:15 »
lorents  [?]
Цитата
Основные требования к приложению:
1. запретить одновременную работу более одной копии проекта;
2. сделать многопоточность при оптимизации PNG изображений;
AutoIt онопоточен по определению

А вот все остальное вполне осуществимо, если интересует могу начать.




  Записан
Приму в дар инвайт на dirty

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Image Catalyst
« Ответ #2, Отправлен: Февраль 11, 2012, 10:30:39 »
Redline благодарю, что отозвались.

смотрите, многопоточность, очень важная функция, без нее нет смысла реализовывать проект
смотрел вот эту тему, может поможет.

Смотрите, оптимизация изображений происходит по специальному алгоритму (грубо говоря эта цепочка приложений). Суть задачи в том, чтобы я мог последовательно запустить допустим 4 алгоритма с изображениями подряд и ждал их завершения, как только один поток завершил работу, запускаем другой и т.д. Выходит у нас 4 независимых потока.

Такой вопрос, а вы не хотели бы сейчас помочь кое-что сделать для текущей версии?
нужно, написать несколько скриптов, они не сложные.




  Записан

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Image Catalyst
« Ответ #3, Отправлен: Февраль 11, 2012, 11:06:34 »
lorents
Да можно будет запустить программ-обработчиков и ждать ответа от них.

Цитата
Такой вопрос, а вы не хотели бы сейчас помочь кое-что сделать для текущей версии?
нужно, написать несколько скриптов, они не сложные.
Я уже накидал GUI с менюшками и листом, сейчас буду навешивать алгоритмы на пункты меню. Попозже выложу примерчик.

Или вы что-то другое имели ввиду под помощью?  :)




  Записан

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Image Catalyst
« Ответ #4, Отправлен: Февраль 11, 2012, 12:06:20 »
Цитата
Или вы что-то другое имели ввиду под помощью
А вы не хотите стать постоянным участником?

Жду с нетерпением GUI пример




  Записан

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Image Catalyst
« Ответ #5, Отправлен: Февраль 11, 2012, 13:22:15 »
lorents  [?]
Цитата
А вы не хотите стать постоянным участником?
Могу заниматься в свободное время

Вот примерно так я это вижу:
Как и предполагал - возникли проблемы со снятием с паузы - проще всего это реализовать через горячие клавиши. Но после танцев с бубном удалось обойтись без клавиатуры.

Позже добавлю работу с листом.




  Записан

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Image Catalyst
« Ответ #6, Отправлен: Февраль 11, 2012, 17:29:18 »
Вот с рабочим листом - в него пишутся полные пути файлов, которые добавлены через добавление файлов или папок.
Создал общий массив куда копируются пути всех файлов, наверняка основная работа будет с ним.

По поводу TreeView не совсем ясно его предназначение.
Сделал простой TreeView в котором слева отображается имя добавленного файла, а если добавлена папка, то отображается имя папки без полного пути и добавляется ветвление, но только на один уровень. Делать полное ветвление дюже сложно, а добавлять событие при клике на него или еще что-то будет еще сложнее. Поэтому предлагаю от него отказаться совсем.

По поводу действий при совпадении названий.
Правильно ли я понял:
Если копируется выбранная нами папка, то при условии присутствия в папке-приемнике такой же папки  мы создаем копию?
Если с такими же условиями копируется выбранный нами файл, то создаем его копию?
Если все так, то это реализуется элементарно.

Дело за малым. Мне нужно знать как нужно передавать в утилиту файлы (в каком виде, по сколько штук/папок и т.д.). Временную папку создать и удалить так же легко, как и прервать весь процесс.

В общем разбирайтесь с кодом, а во вторник (может понедельник) продолжим  ;)




  Записан

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Image Catalyst
« Ответ #7, Отправлен: Февраль 11, 2012, 22:20:50 »
Redline отличная работа  :)

Хочу сразу сказать, на счет алгоритмов оптимизации они сейчас не нужны.

и так продолжим:
1. TreeList нужен для того, чтобы пользователь мог видеть папку которую он добавил, и мы ищем изображения не только в папке которую он указал, но и вложенные папки, посмотрите на картинку добавления папок



Картинку TreeList я привел как пример.
Допустим у пользователя есть папка C:\Downloads\Joomla и там есть вложенные папки. Пользователь добавляет папку Joomla с вложенными папками. В TreeList мы должны отобразить папку Joomla с изображениями а так же вложенные папки с изображениями.

Столбцы TreeList:
- File Name (отображаем как раз папки и изображения);
- Original Size (оригинальный размер изображений, в кб, округляем до сотых);
- New Size (оптимизированный размер изображений, в кб, округляем до сотых);
- Savings (разница между оптимизированным и оригинальным размерами, в кб, округляем до сотых);
- % Savings (считаем так, (1-New Size/Original Size)*100, округляем до сотых);
- Path (путь сохранения изображения, здесь два варианта: заменяем оригинальные изображения на оптимизированные; сохраняем в указанной папке пользователя, более подробнее я написал ниже);
- Status (отображаем: ждет оптимизации, в процесс, оптимизирован, как грфически отобразить не знаю).

Кстати, обратите внимание на окно выбора папок

2. думаю лучше сделать, чтобы диалоговые окна имели стандартное вид. Имею ввиду окна - Options и About.

3. посмотрите на изображение



как вы видите там есть функция выбора папки сохранения изображения, а так же пересохранять.
Надо сделать такую же функцию, только внизу окна проекта.
- заменяем оригинальные файлы на новые, здесь все понятно
- сохраняем в указанной папке. Лучше покажу пример.
Допустим пользоваткль указал папку оптимизации C:\Downloads\Joomla (в папке есть вложенные папки), а паку сохранения C:\Images. Цель воссоздать всю структуру вложенных папок. Делаем так, в папке  C:\Images создаем папку Joomla (C:\Images\Joomla) и уже в ней создаем структуру вложенных папок. Если в папке C:\Images уже есть папка Joomla, то создаем новую папку и называем Joomla (1) и т.д.
Если пользователь просто указал файлы, то сохраняем в папке C:\Images если файлы имею одинаковые названия, то действуем как для папок.

4. Многопоточность. При оптимизации необходимо подряд запустить потоки и ждать из завершения. Только для изображений PNG.

5. Оптимизация изображений. Копируем изображение во временную папку, оптимизируем, а дальше смотрим настройки пользователя. Пока можем просто копировать во временную папку, и потом заменяем оригинальный на новый, или отправляем изображение в указанную папку.
« Последнее редактирование: Февраль 13, 2012, 08:19:27 от lorents »



  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1403
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5068
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Re: Image Catalyst
« Ответ #8, Отправлен: Февраль 11, 2012, 23:38:59 »
ПредупреждениеЗа нарушение правил форума (пункт Б.5):
Цитата
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.

Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Image Catalyst" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.




  Записан
Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.



«Не оказываю техподдержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Redline [?]

  • AutoIt Гуру
  • *****
  • Репутация: 278
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 425
  • Версия AutoIt: 3.3.6.1
    • Награды
В общем ты сам запутался  :D TreeView это нижнее окошко в моем примере, а верхнее это ListView
Выходит нам TreeView вообще не нужно, так?

Папки и файлы будут выводиться единым списком. Только папки выводить в виде списка файлов, которые в них есть (если стоит галка [включая вложенные], то список будет просто длиннее).
Вот хороший пример: MP3Gain

Список с такими колонками можно соорудить, не проблема, как и выбор папки в виде строки с галкой overwite.

Цитата
Кстати, обратите внимание на окно выбора папок
Если ты про "look in subfolders" и фильтр PNG, то какое реализовать не выйдет, т.к. окно выбора папки системное, а в примере самоделка.
Но если сильно нужно, то попробуйте покопаться на офф сайте, если сможешь реализовать такое сам, то позже добавим, а пока можно сделать галку перед overwrite. Обучаемость и самостоятельность на этом форуме приветствуется  :IL_AutoIt_1:

Статус обработки можно отображать цветом строки - как на скриншоте MP3Gain
Копирование во временную папку сделаю.
Стиль окон сброшу в  стандартный.

Позже выложу результат.




  Записан

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Redline
Меня интересует именно объект TreeList, как на рисунке, в основном добавление картинок посходит именно через добавление папок, то пользователь становится удобней смотреть, что он добавил.
Сейчас можем сделать через ListView, а дальше посмотрим.

на счет стасуса согласен. :)




  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1909
  • Online Online
  • Пол: Мужской
  • Сообщений: 3970
  • Версия AutoIt: 3+
    • Награды
OffTopicПросто мысли.

Проект, безусловно, заслуживает внимания, но оптимизация PNG на практике представляется малополезной. Я не читал статью полностью, но Interlaced сейчас практически не используется, а первый пример с обезьяной, по крайней мере, некорректен, т.к. изображение ARGB было получено из Indexed, а должно быть наоборот. Оптимизация палитры? Да, но это в основном будет актуально для RGB изображений с небольшим количеством цветов, хотя это уже можно расценивать как ошибка дизайна. Наиболее часто всречающаяся ситуация - наличие Alpha-канала там, где его не должно быть. В этом случае можно перевести изображение из 32- в 24-битный формат, но это опять же невнимательность разработчика, да и выигрыш будет ~10-12%.

А более-менее вменяемое уменьшение размера JPEG без изменения качества изображения я вообще слабо представляю. Да и в большинстве случаев будет более выгодно сделать выбор в пользу GIF или того же PNG, нежели использовать JPEG. На мой взгляд, JPEG целесообразнее использовать для изображений действительно больших размеров (ЦФК), ну или там где вообще качество имеет второстепенное значение. +JPEG поддерживает CMYK.

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

А так, я использую "Automate - Batch..." из Adobe Photoshop.

:)



Добавлено: Февраль 14, 2012, 12:39:55
...мой алгоритм оптимизации наголову превосходит.

Просто интересно, на каком ЯП написан ваш алгоритм и каким образом будет запускаться (exe, dll, COM, source и т.д.)? Просто, исходя из того, что вы собираетесь создавать временный файл в противовес работе с памятью, я думаю, что не весь код будет ваш.

Кроме того, я на 98% уверен, что многопоточность здесь будет избыточной, ну или по крайней мере без нее можно спокойно обойтись.
« Последнее редактирование: Февраль 14, 2012, 12:46:28 от Yashied, Причина: Объединение сообщений »



  Записан
Думай, прежде чем говорить.

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Yashied
Цитата
Interlaced сейчас практически не используется
Согласен с вами, поддержку реализовал, но в природе таких картинок не встречал.

Цитата
изображение ARGB было получено из Indexed
не совсем так, когда я нашел эту картинку, она была в ARGB, очень многие пользователи не знают, где надо использовать ARGB, а где Indexed

Цитата
Оптимизация палитры? Да, но это в основном будет актуально для RGB изображений с небольшим количеством цветов
палитра только у Indexed PNG, вот статья по этому поводу

Цитата
Наиболее часто всречающаяся ситуация - наличие Alpha-канала там, где его не должно быть.
не забывайте, про так называемую "чисту" под альфа каналом, я об этом писал, и провидил пример с мышкой. Здесь описана более продвинутая технология, она реальзована в проекте.

Цитата
А более-менее вменяемое уменьшение размера JPEG без изменения качества изображения я вообще слабо представляю.
все дело в удалении метаданных и выбора кодировки, у меня поддержка только двух кодировок, а их намного больше, смысла реализовывать нету, в природе я их не встречал.

Цитата
Да и в большинстве случаев будет более выгодно сделать выбор в пользу GIF или того же PNG, нежели использовать JPEG.
Мой вам совет, забудьте GIF, если не для анимации. Сжатие PNG выше чем у GIF.
Видел пример, где сравниваются GIF (256 цветов, выше не поддерживается) и PNG (ARGB), то тогда да GIF просто рвет. И PNG и JPEG отличные форматы, но главное знать, что и где использовать.

Цитата
JPEG поддерживает CMYK.
в новой версии, будет ее поддержка.

Цитата
Вообщем, как мне представляется, оптимизация данных форматов (если говорить действительно о неизменном качестве) сводится к уменьшению размера на несколько процентов, да и то, в большинстве случаев, это обусловленно невнимательностью разработчика.
и да, и нет. Да потому что это есть, и нет, так как оптимизация связана не только с этим.


Добавлено: Февраль 14, 2012, 12:46:21
Вот она моя беда, я дал описание алгоритма, я пощупать то не дал, прошу прощения.

http://forum.ru-board.com/topic.cgi?forum=4&topic=4263

сейчас в тестовом режиме находится версия 2.2 (если, что могу выслать)


Добавлено: Февраль 14, 2012, 12:49:10
Yashied посмотрите пожалуйста проект, многопоточность играет ключевую роль для PNG, оптимизация PNG медленная.
« Последнее редактирование: Февраль 14, 2012, 12:49:10 от lorents, Причина: Объединение сообщений »



  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1909
  • Online Online
  • Пол: Мужской
  • Сообщений: 3970
  • Версия AutoIt: 3+
    • Награды
Но почему вы не сделаете dll + SDK. Делать обвеску для кучи консольных программ не самый лучший способ, хотя...




  Записан

lorents [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 74
  • Версия AutoIt: 3.3.8.1
    • Награды
Yashied приложения не мои, и большинство имею закрытый исходный код, а главное знаний нету таких.




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
 Закреплено  Отзывы и пожелания по работе проекта и форума
О проекте и форуме
CreatoR 720 72067 Последний ответ Май 12, 2012, 13:11:28
от Александр
 Закреплено  Текущие задачи проекта
О проекте и форуме
CreatoR 0 3550 Последний ответ Октябрь 16, 2009, 19:17:14
от CreatoR
Создание всплывающих окон (изображений)
UDF - Пользовательские функции
Yashied 27 3901 Последний ответ Апрель 26, 2012, 17:25:42
от agikon
Можно ли переконвертировать из - Bmp в Png - без потери бесцветных участков.
AutoIt для новичков
assch 3 904 Последний ответ Июль 27, 2010, 20:17:20
от Yashied
 Закреплено  Описание проекта Русское сообщество AutoIt
О проекте и форуме
CreatoR 0 2548 Последний ответ Февраль 01, 2011, 23:50:21
от CreatoR
[Элементы GUI] Создание окна с элементами изображений
GUI - Графический интерфейс пользователя
_Lexa98_ 0 2176 Последний ответ Ноябрь 03, 2011, 20:25:10
от _Lexa98_
Как перемасштабировать картинку без потери качества?
AutoIt для новичков
Gealut 4 291 Последний ответ Март 08, 2012, 12:03:28
от Gealut
Разработка UDF для добавления ресурсов в исполняющий файл
Общение
Viktor1703 4 250 Последний ответ Март 28, 2012, 18:14:09
от Viktor1703
[Автоматизация] Разработка бота для накрутки счётчика голосов
Автоматизация IE и Web-интерфейса
S1R1US 10 529 Последний ответ Апрель 26, 2012, 09:45:56
от S1R1US
[Элементы GUI] Перемещение Pic без моргания и потери прозрачности
AutoIt для новичков
Ganibal95 1 104 Последний ответ Май 19, 2012, 16:21:59
от Arei


Реклама

* Последние сообщения на форуме
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 14:11:37
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Arei Сегодня в 13:24:59
post Re: Смена IP адресса
[AutoIt для новичков] Zaramot Сегодня в 13:04:33
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Александр Сегодня в 12:59:21
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 12:23:31
post [Мышь, клавиатура] Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] Nurgazy Сегодня в 12:09:36
post Re: Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] madmasles Сегодня в 12:08:03
post Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] webmonster Сегодня в 12:03:38
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] ---Zak--- Сегодня в 11:39:56
post Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 11:26:37

* Пользователи онлайн
  • Dot Гостей: 132
  • Dot Скрыт: 2
  • Dot Пользователей: 33
  • Dot Пользователи Online: