PDA

Показать полную графическую версию : [решено] Есть папка с большим количеством jpeg файлов, надо сохранить файлы как .bmp


evg64
30-09-2009, 19:27
Добрый день! Есть папка с большим количеством jpeg файлов, надо копирнуть папку и сохранить файлы как .bmp.
Я столкнулся с проблемой при решении такой задачи. Поначалу думал сделать так:
1) копирнуть папку
2) вызвать paint через $obj=objcreate()
3) в $obj по очереди подгружать файлы и сохранять их как бмп.
Но мне сказали, что пэинт нельзя создать через objcreate(), другого варианта решения не вижу... а он наверняка есть :)

Sp01LeR
30-09-2009, 20:15
Чтоб не терзать винду, для конверта и изменения граф. файлов можно(и даже нужно) использовать сторонние утилиты, например эту (http://www.imagemagick.org/script/binary-releases.php#windows)

Iska
30-09-2009, 23:58
Если предпочтёте работать через Automation (например, если конвертирование — лишь часть большего проекта), то я бы предложил обратить внимание на GFL SDK - Library to load images and photos easily (http://www.xnview.com/en/gfl.html). Со страницы загрузки (http://www.xnview.com/en/download_gfl.html) лучше всего брать полную версию GFL SDK (из-за большего количества материала) — компонент GFLAx (впрочем, доступный там же для загрузки и отдельно) в неё входит. Простой пример конвертации одного файла из «*.jpg» в «*.bmp»:
AutoItSetOption("MustDeclareVars", 1)

Local Const $AX_BMP = 4

Local $objGflAx = ObjCreate("GflAx.GflAx")

With $objGflAx
.LoadBitmap(@DocumentsCommonDir & "\Мои рисунки\Образцы рисунков\Зима.jpg")
.SaveFormat = $AX_BMP
.SaveBitmap("c:\Temp\Converted.bmp")
EndWith

$objGflAx = 0

Exit(0)

Конечно, возможностей у библиотеки куда как больше, нежели простая конвертация; почитать об объектной модели можно будет после установки в файле «GflAx-Help.chm», некоторые примеры работы можно посмотреть здесь: Серый форум / WSH: разбиение/склейка изображений (http://forum.script-coding.info/viewtopic.php?id=2381), Серый форум / VBScript: вывод текста поверх обоев Рабочего стола (http://forum.script-coding.info/viewtopic.php?id=2510), ну и, конечно, банальным поиском в Google (http://www.google.ru/search?q=%22GflAx.GflAx%22).

Замечание 1: справедливости ради надо отметить, что, поскольку AutoIt умеет напрямую работать с DLL, можно не использовать Automation, а работать сразу с функциями соответствующей библиотеки «libgflXXX.dll» или непосредственно, так сказать, из коробки — с «gdiplus.dll». Однако сие гораздо сложнее.

Замечание 2: кстати сказать: и вышеуказанный Sp01LeR'ом ImageMagick тоже умеет работать не только в качестве утилиты командной строки, но и в качестве сервера Automation; однако же, на мой взгляд, к сожалению, реализовано там сие очень неудобно — а именно как прямой аналог параметров командной строки (справедливо для версии «ImageMagick-6.3.4-Q16»; возможно, что в новых версиях ситуация поменялась, но вряд ли).

amel27
01-10-2009, 05:20
Есть папка с большим количеством jpeg файлов, надо копирнуть папку и сохранить файлы как .bmp »где-то так:
#include <GDIPlus.au3>

$sJPGFile = "C:\TEST\PIC.JPG"
$sBMPFile = "C:\TEST\PIC.BMP"

_GDIPlus_Startup()

$hImage = _GDIPlus_ImageLoadFromFile($sJPGFile)
$CLSID = _GDIPlus_EncodersGetCLSID("BMP")
$iRes = _GDIPlus_ImageSaveToFileEx($hImage, $sBMPFile, $CLSID)

_GDIPlus_Shutdown()

Iska
01-10-2009, 06:37
Изумительно! Это будет наилучший вариант.

Увы, я на эту библиотеку как-то практически не обращал внимания и совсем забыл про неё при обсуждении :(.

evg64
01-10-2009, 08:33
Всем спасибо! Вариантов оказывается много! Проблема решена! amel27, вам особенная благодарность! :)

Yashied
01-10-2009, 10:11
Я для этого использую Photoshop.

R.M.L
01-10-2009, 17:12
Right Click Image Converter был бы кстати

evg64
02-10-2009, 08:56
Я для этого использую Photoshop »
Оо! С фотошопом я не знаком, а там можно сразу много файлов так перезаписывать? Не надо, как в пэинте, Открыть файл - сохранить как ? :)

Iska
02-10-2009, 09:46
evg64, надо :). Только делаться сие может:
а) в пакетном режиме работы — макросами (Actions) непосредственно в PhotoShop: наиболее просто и понятно, можно обрабатывать папку целиком, но мало интерактивных возможностей;
б) используя Automation — «ObjCreate("Photoshop.Application")»; описание в формате *.pdf с примерами входит в поставку приложения.

Всё же, на мой взгляд, применение столь «тяжеловесного» приложения как Adobe Photoshop уместно только при нестандартной, сложной, «тяжёлой» или требующей интерактивного вмешательства обработке растровой графики. Иначе сие выглядит пальбой из пушки по воробьям. Ну, и не надо забывать о цене продукта.




© OSzone.net 2001-2012