FreeImage размер сохраненного файла картинки

Программы на Clarion, шаблоны, библиотеки и пр.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
✯ Ветеран ✯
Сообщения: 1254
Зарегистрирован: 25 Март 2009, 21:55

FreeImage размер сохраненного файла картинки

Сообщение gopstop2007 » 06 Август 2016, 10:05

Вопрос сообществу, файл TPS c полем BLOB в котором сохраняются картинки, перед отправкой на фтп сервер помощью с сабжа сохраняю картинку на диск размер картинки равен 100кБ, с помощью программы например XnView открываю эту же картинку и пере сохраняю эту же картинку, размер равен 22кБ. Смотрю чем отличается картинка 100кБ и 22кБ, вижу разницу в параметрах пиксель на дюйм - 100кБ(???х???), в 22кБ(72х72). Какие и где параметры в FreeImage нужно задать для получения картинки размера равного 22кБ?
Размеры картинок и прочие параметры, кроме указанных мною, полностью идентичны.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Ал
Ветеран
Сообщения: 793
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

FreeImage размер сохраненного файла картинки

Сообщение Ал » 06 Август 2016, 13:05

http://www.clarionfreeimage.com/
You may also use the FreeImage base class without the image control for those times when you don't need to display the image. For example, it works perfectly to create thumbnails of all images in a folder.

The following code is all that's required to load an image and create a thumbnail 64 pixels wide using a BSpline resampling filter, and then save it in a different file.

ThumbImage FreeImageClass
Code
If ThumbImage.iImage.Load('C:\images\ImageFile.jpg')
ThumbImage.iImage.Thumbnail(64, FILTER_BSPLINE)
ThumbImage.iImage.SaveAs('C:\images\ImageFileThumb.jpg')
End

Here are some of the other operations that the base class supports:
UP
если не важно, что только FreeImage http://forum.clarionlife.net/phpbb/view ... e&start=15, то посмотреть ImageEx

Код: Выделить всё

if ~'.png' = ExtractFileExt(clip(longpath(PATH:Photo))&'\'&clip(loc:Фотография1)) ! не PNG
	ThumbFeatures(clip(longpath(PATH:Photo))&'\'&clip(loc:Фотография1),PWidth,PHeight,'_thm')  ! делаем из стандартной
...

Yufil
Ветеран движения
Сообщения: 1123
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

FreeImage размер сохраненного файла картинки

Сообщение Yufil » 06 Август 2016, 22:47

Я менял размер через rescale
Картинка формируется в трёх разных размерах - маленьком, среднем и большом

Код: Выделить всё

 
                   cfiObject4.iImageControl.Reset()
                   W=352
                   H=264
                   cfiObject4.iImage.Rescale(W,H,2)
                   FileName= Main:Id & '_' & MIM:Id & '.jpg'
                   !S.Cat('<13,10><<IMAGE FILE="' & Ansi2Html(FileName) & '"/>')
                   FileName=LongPath() & '\Image\' & fileName
                   cfiObject4.iImage.Save(FileName,2)
                   MsgQ:S='Картинка ' & FileName
                   Do AddMsgQ
                   !
                   cfiObject4.iImageControl.Reset()
                   W=176
                   H=132
                   cfiObject4.iImage.Rescale(W,H,2)
                   FileName= Main:Id & '_' & MIM:Id & '_medium.jpg'
                   !S.Cat('<13,10><<IMAGE TYPE="MEDIUM" FILE="' & Ansi2Html(FileName) & '"/>')
                   FileName=LongPath() & '\Image\' & fileName
                   cfiObject4.iImage.Save(FileName,2)
                   !
                   W=72
                   H=54
                   cfiObject4.iImage.Rescale(W,H,2)
                   FileName= Main:Id & '_' & MIM:Id & '_small.jpg'
                   !S.Cat('<13,10><<IMAGE TYPE="SMALL" FILE="' & Ansi2Html(FileName) & '"/>')
                   FileName=LongPath() & '\Image\' & fileName
                   cfiObject4.iImage.Save(FileName,2)
                   !

gopstop2007
✯ Ветеран ✯
Сообщения: 1254
Зарегистрирован: 25 Март 2009, 21:55

FreeImage размер сохраненного файла картинки

Сообщение gopstop2007 » 07 Август 2016, 12:00

Мне не надо менять размер картинки, :)
ThumbImage FreeImageClass
Code
If ThumbImage.iImage.Load('C:\images\ImageFile.jpg')
ThumbImage.iImage.Thumbnail(64, FILTER_BSPLINE)
ThumbImage.iImage.SaveAs('C:\images\ImageFileThumb.jpg')
End
Ал, Ваш код создает миниатюру размером 64
мой вопрос: разный размер(вес) файлов одной и той же картинки с одинаковым размером (700х700), в моем случае картинка сохраняется в JPG
Вот два файла для сравнения
файл с большим размером файла https://mega.nz/#!yYBxDZbR!SijZ4PP9DH2u ... YVMzoeFHKU
меньшим https://mega.nz/#!zFpDUaQS!LPoKp-P8S04y ... LZTBL5f-rc
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

FreeImage размер сохраненного файла картинки

Сообщение kreator » 07 Август 2016, 12:58

Открыл файлы Corel'ом (последним). В свойствах совершенно одинаковая информация (к слову разрешение 96х96, встроенных объектов нет). У меня есть подозрение, что качество изображение разное. Правда, на глаз не очень заметно, можно сказать не заметно совсем. Картинка такая (плавные переходы цвета, цвета не сильно разные), что jpeg ещё лучше может упаковать без заметного ухудшения качества. JPEG плохо работает на полноцветной картинке, естественно, при качестве не 100%. Может такие картинки сравнить? И ещё. Сохраняю тем же Corel'ом при 100% качестве, оригинальная становится меньше (112кб), результат - больше (89кб).
We are hard at work… for you. :)

Ал
Ветеран
Сообщения: 793
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

FreeImage размер сохраненного файла картинки

Сообщение Ал » 07 Август 2016, 13:11

gopstop2007 писал(а):Мне не надо менять размер картинки, :)
ThumbImage FreeImageClass
Code
If ThumbImage.iImage.Load('C:\images\ImageFile.jpg')
ThumbImage.iImage.Thumbnail(64, FILTER_BSPLINE)
ThumbImage.iImage.SaveAs('C:\images\ImageFileThumb.jpg')
End
Ал, Ваш код создает миниатюру размером 64
мой вопрос: разный размер(вес) файлов одной и той же картинки с одинаковым размером (700х700), в моем случае картинка сохраняется в JPG
Вот два файла для сравнения
файл с большим размером файла https://mega.nz/#!yYBxDZbR!SijZ4PP9DH2u ... YVMzoeFHKU
меньшим https://mega.nz/#!zFpDUaQS!LPoKp-P8S04y ... LZTBL5f-rc
Согласен, просмотрел :oops: , - пора в отпуск))
Но тем не менее попробуй сделать миниатюру 700*700...
да, приведенный выше код не мой - с сайта по ссылке...
по теме - думаю надо смотреть на FreeImage Bitmap function... или на ImageEx - "поиграть" с до устраивающего результата с fi.Iimage.GetBPP() ... fi.Iimage.ConvertColorDepth(FI_24BIT,,) ... fi.Iimage.SetSaveOption(JpegQuality)...

Yufil
Ветеран движения
Сообщения: 1123
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

FreeImage размер сохраненного файла картинки

Сообщение Yufil » 07 Август 2016, 17:31

Хмм, собственно, для отправки по FTP эти картинки и предназначались.
Каждая картинка шла в трёх размерах - маленькая, средняя и большая, от 10К до 300К
Программа работала (а может быть, и работает до сих пор), а количеством пикселов на дюйм даже не поинтересовался.
Оно надо ?

Yufil
Ветеран движения
Сообщения: 1123
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

FreeImage размер сохраненного файла картинки

Сообщение Yufil » 07 Август 2016, 18:00

Кстати, ещё вопрос - а каким способом картинка сохранялась в Blob? Дело в том, что при сохранении картинки с экрана можно получить битмап картиники, а можно исходник файла. Это криво и непонятно описано в параметре Prop:PrintMode
Например, если я пишу

Код: Выделить всё


DOC                  FILE,DRIVER('TOPSPEED',Glo:DriverOptions),OWNER(Glo:OwnerName),NAME(Fn:Doc),PRE(DOC),BINDABLE,CREATE,THREAD
DIR_FNAME                KEY(DOC:DIR,DOC:FNAME),DUP,NOCASE,OPT
VALUE                       BLOB,BINARY
Record                   RECORD,PRE()
DIR                         CSTRING(16)
FNAME                       CSTRING(260)
Date                        ULONG
Time                        ULONG
                         END
                     END   
                     
....                      
               ?Image{Prop:PrintMode}=3
                ?Image{Prop:ImageBlob}=Doc:Value{Prop:Handle}
То в Blob идёт не битмэп, а картинка, которую я отражал. А если ещё чуть вникнуть и положить в Blob собственно файл с картинкой, он будет выведен и он же сохранён, примерно так

Код: Выделить всё

           ?Image{Prop:PrintMode}=3
           ?Image{Prop:Text}=Glo:MainDir & '\PIC\' &  DirQ:Name
           Doc:Date=DirQ:Date2
           Doc:Time=DirQ:Time
           Doc:Value{Prop:Handle}=?Image{Prop:ImageBlob}
           PackBlob(Doc:Value)
           Access:Doc.Update()
 
Таким образом, на экран выводится та самая картинка, которая лежит в базе.
Скорее всего я всё неправильно понял и дело совсем не в этом :)

Ал
Ветеран
Сообщения: 793
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

FreeImage размер сохраненного файла картинки

Сообщение Ал » 07 Август 2016, 18:07

про 3 варианта размера - тут видимо особо ничего не придумаешь, у всех примерно похоже
Буфер обмена-1.jpg
а по поводу примера с XnView - у неё в описании указано
The JPEG functions are based in part on the work of the Independent JPEG group
The PNG functions are based in part on the work of the Group 42, Inc
This software use the compression library (ZLIB) of Jean-loup Gailly and Mark Adler
, поисковик выдал много чего:
http://www4.cs.fau.de/Services/Doc/grap ... bjpeg.html http://www.quanser.com/Products/quarc/d ... cense.html http://newsgroup.xnview.com/viewtopic.php?f=79&t=23119 http://graphicssoft.about.com/od/format ... sfacts.htm

gopstop2007
✯ Ветеран ✯
Сообщения: 1254
Зарегистрирован: 25 Март 2009, 21:55

FreeImage размер сохраненного файла картинки

Сообщение gopstop2007 » 07 Август 2016, 20:37

Yufil писал(а):Хмм, собственно, для отправки по FTP эти картинки и предназначались.
Каждая картинка шла в трёх размерах - маленькая, средняя и большая, от 10К до 300К
Программа работала (а может быть, и работает до сих пор), а количеством пикселов на дюйм даже не поинтересовался.
Оно надо ?
Спасибо за подробные разъяснения с примерами кода :) Но в данном случае, проще отослать картинку (большую), а из нее нарезаются маленькие на сервере Opencart-ом :)
Yufil писал(а):Кстати, ещё вопрос - а каким способом картинка сохранялась в Blob?
Хороший вопрос :)
Когда отсылаются 3 000-10 000 картинок, вес имеет значение, и еще есть ограничение на Opencart, фото-картинки больше 300кб не создаются автоматом маленькие картинке на сервере, правда от хостинга это тоже зависит. :(
Ал писал(а): а по поводу примера с XnView - у неё в описании указано
The JPEG functions are based in part on the work of the Independent JPEG group
The PNG functions are based in part on the work of the Group 42, Inc
This software use the compression library (ZLIB) of Jean-loup Gailly and Mark Adler
, поисковик выдал много чего:
http://www4.cs.fau.de/Services/Doc/grap ... bjpeg.html http://www.quanser.com/Products/quarc/d ... cense.html http://newsgroup.xnview.com/viewtopic.php?f=79&t=23119 http://graphicssoft.about.com/od/format ... sfacts.htm
Интересно, спасибо посмотрю :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Ал
Ветеран
Сообщения: 793
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

FreeImage размер сохраненного файла картинки

Сообщение Ал » 08 Август 2016, 12:04

фото-картинки больше 300кб не создаются автоматом маленькие картинке на сервере
самое очевидное - размер файла проверять при записи в базу или сразу перед отправкой и не прошедшие отбор перед отправкой дополнительно обрабатывать (JpegQuality, ColorDepth,...), пока размер в норму не станет укладываться?

Ответить