Как быстро создавать миниатюры изображений |
Здравствуйте, гость ( Вход | Регистрация )
Как быстро создавать миниатюры изображений |
BagmutA |
20.4.2011, 11:20
Сообщение
#1
|
Студент Группа: Участник Сообщений: 27 Регистрация: 13.4.2011 Пользователь №: 2599 Спасибо сказали: 0 раз(а) Репутация: 0 |
Созаю миниатюры изображений:
Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр. В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview). Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение. |
|
|
wiz29 |
20.4.2011, 13:10
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
Созаю миниатюры изображений:
Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр. В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview). Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение. Тебя смущает "подвисание" во время загрузки или что то еще? |
|
|
BagmutA |
20.4.2011, 13:38
Сообщение
#3
|
Студент Группа: Участник Сообщений: 27 Регистрация: 13.4.2011 Пользователь №: 2599 Спасибо сказали: 0 раз(а) Репутация: 0 |
Созаю миниатюры изображений:
Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр. В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview). Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение. Тебя смущает "подвисание" во время загрузки или что то еще? Это все происходит в отдельном потоке. Собственно интересует как можна быстро загрузит картинку или вообще как можна быстро создавать миниатюры изображений? |
|
|
wiz29 |
20.4.2011, 13:54
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
Тогда нужно использовать конкретные библиотеки для чтения файлов графических форматов, например в JPEG могут хранится миниатюры, но не всегда они есть, поэтому придется загружать файл целиком (в случае когда нет миниатюры в файле). Это сэкономит время лишь в ряде случаев и не для всех типов форматов.
Если время создания миниатюр критично (например известно что они должны создаваться в основном для файлов фоток, в них как правило хранятся миниатюры) то используй libJPEG библиотеку для работы с jpeg'ом. в api libjpeg есть функции по загрузке миниатюр. Есть более общая либа, freeImage, она объединяет в себе несколько библиотек для чтения нескольких форматов файлов, на сколько универсально ее api не могу сказать, в моих проектах используются конкретные библиотеки для конкретных форматов. |
|
|
RazrFalcon |
20.4.2011, 15:16
Сообщение
#5
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Медленно - это сколько?
У меня на не новом ноуте, чтение изображение из тегов .flac и сжатие до 200pix, происходит практически мгновенно. Можно покрутить сторонние библиотеки. Тот же openCV, imagemagic. Но у них тоже все упирается во время загрузки изображения. Это скорее от железа зависит. |
|
|
BagmutA |
20.4.2011, 15:23
Сообщение
#6
|
Студент Группа: Участник Сообщений: 27 Регистрация: 13.4.2011 Пользователь №: 2599 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ну я же говорю, что в 2-3 раза медленне нежели в других просмотрщиках.
Есть идея использовать QIcon:
Но проблема в том, что в QThread небезопасно использовать QPixmap, пишет:QPixmap: It is not safe to use pixmaps outside the GUI thread. И соответственно не сохраняется миниатюра. Как можно преобразовать QIcon непосредственно в QImage или хотя бы без промежуточного использования QPixmap? |
|
|
RazrFalcon |
20.4.2011, 16:16
Сообщение
#7
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
|
|
|
BagmutA |
20.4.2011, 16:43
Сообщение
#8
|
Студент Группа: Участник Сообщений: 27 Регистрация: 13.4.2011 Пользователь №: 2599 Спасибо сказали: 0 раз(а) Репутация: 0 |
Честно говоря я там ничего нужного не нашёл, если там и пытаются делать что-то похожее то посредством QPixmap. |
|
|
wiz29 |
20.4.2011, 17:10
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
нельзя использовать QPixmap вне guithread , соответственно подходит только QImage.
в 2-3 раза медленнее с чем сравниваешь и на каких форматах изображения? я писал нечто подобное, Image browser, он генерит представление thumbnail'ов работает не медленнее чем IrfanView. в Gui поток приходят миниатюры, дальше отправляются в QGraphicsView представление. но там для чтения миниатюр из jpeg используется libJPEG. Поскольку они оч мало занимают, то загружаются практически мгновенно.... |
|
|
BagmutA |
20.4.2011, 17:15
Сообщение
#10
|
Студент Группа: Участник Сообщений: 27 Регистрация: 13.4.2011 Пользователь №: 2599 Спасибо сказали: 0 раз(а) Репутация: 0 |
в 2-3 раза медленнее с чем сравниваешь и на каких форматах изображения? Брал папку с десятью 18-мегапиксельными изображениями и засекал время создания миниатюр в Gwenview и в моей программе. я писал нечто подобное, Image browser, он генерит представление thumbnail'ов работает не медленнее чем IrfanView. в Gui поток приходят миниатюры А можно по подробней. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 4:19 |