FreeImage -> ImageEx Crop&Save фотографии
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
FreeImage -> ImageEx Crop&Save фотографии
Кто нибудь пользовался по серьезному FreeImage библиотекой.
Интересует RESIZE и фиксированный CROP для jpeg файла с последующей записью.
Интересует RESIZE и фиксированный CROP для jpeg файла с последующей записью.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3291
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: FreeImage
Я делал превращение больших изображений в thumbnails (оба в blob-ах), используя ImageEx:
Код: Выделить всё
ImageEx:Thumbnail PROCEDURE (BLOB pSrc, BLOB pDst, SIGNED pWidth, SIGNED pHeight)
tnail ImageExThumbnailerClass
saver ImageExJpegSaverClass
CODE
tnail.Width = pWidth
tnail.Height = pHeight
tnail.AutoOrientation = TRUE
tnail.Mode = IMAGEEXTHUMBMODE:CROP
tnail.StretchFilter = IMAGEEXSTRETCHFILTER:LANCZOS
tnail.DrawMode = IMAGEEXDRAWMODE:OPAQUE
tnail.Saver &= saver
RETURN CHOOSE(tnail.CreateThumbnail(pSrc, pDst) <> 0)
С уважением, ДП
Re: FreeImage
Нашел - берем на вход файл tif с диска, грузим в память и проверяем размер - если подходит то выковыриваем часть картинки, далее сохраняем в 300 dpi pbm на диск. Использовал FreeImage_Copy а не Crop.
PATH_IMG = Clip(TifTitle)
PATH_IMG_NEW = Sub(TifTitle,1,Len(clip(TifTitle))-4) & 'N.pbm'
RETFIF = 18
pImage = FreeImage_Load(RETFIF,PATH_IMG,0)
If pImage <> 0
bWidth = FreeImage_GetWidth(pImage)
bHeight = FreeImage_GetHeight(pImage)
If ((bWidth => 2183 and bWidth <= 2188) and (bHeight => 1415 and bHeight <= 1421)) or ((bWidth => 2183 and bWidth <= 2188) and (bHeight => 2833 and bHeight <= 2837))
If bHeight < 2800 !120
If OHeight = 'Max' !1326x2750|1346x2770
pImageNew = FreeImage_Copy(pImage,2,310,2183,1326) !1326
Else
pImageNew = FreeImage_Copy(pImage,2,310,2183,1346) !1346
.
Else !240
If OHeight = 'Max'
pImageNew = FreeImage_Copy(pImage,2,310,2183,2750) !2750
Else
pImageNew = FreeImage_Copy(pImage,2,310,2183,2770) !2770
.
.
If pImageNew <> 0
FreeImage_SetDotsPerMeterX(pImageNew,11811) !set 300 dpi
FreeImage_SetDotsPerMeterY(pImageNew,11811)
bResult = FreeImage_Save(FIF_PBM,pImageNew,PATH_IMG_NEW,0) ! Save new image
If bResult = 0
MESSAGE(Clip(PATH_IMG_NEW) & ' can not be saved')
.
Else
MESSAGE(Clip(PATH_IMG_NEW) & ' can not be saved')
.
Else
MESSAGE(Clip(PATH_IMG) & ' - not right size')
.
FreeImage_UnLoad(pImage)
Else
MESSAGE('Image can not be loaded')
.
PATH_IMG = Clip(TifTitle)
PATH_IMG_NEW = Sub(TifTitle,1,Len(clip(TifTitle))-4) & 'N.pbm'
RETFIF = 18
pImage = FreeImage_Load(RETFIF,PATH_IMG,0)
If pImage <> 0
bWidth = FreeImage_GetWidth(pImage)
bHeight = FreeImage_GetHeight(pImage)
If ((bWidth => 2183 and bWidth <= 2188) and (bHeight => 1415 and bHeight <= 1421)) or ((bWidth => 2183 and bWidth <= 2188) and (bHeight => 2833 and bHeight <= 2837))
If bHeight < 2800 !120
If OHeight = 'Max' !1326x2750|1346x2770
pImageNew = FreeImage_Copy(pImage,2,310,2183,1326) !1326
Else
pImageNew = FreeImage_Copy(pImage,2,310,2183,1346) !1346
.
Else !240
If OHeight = 'Max'
pImageNew = FreeImage_Copy(pImage,2,310,2183,2750) !2750
Else
pImageNew = FreeImage_Copy(pImage,2,310,2183,2770) !2770
.
.
If pImageNew <> 0
FreeImage_SetDotsPerMeterX(pImageNew,11811) !set 300 dpi
FreeImage_SetDotsPerMeterY(pImageNew,11811)
bResult = FreeImage_Save(FIF_PBM,pImageNew,PATH_IMG_NEW,0) ! Save new image
If bResult = 0
MESSAGE(Clip(PATH_IMG_NEW) & ' can not be saved')
.
Else
MESSAGE(Clip(PATH_IMG_NEW) & ' can not be saved')
.
Else
MESSAGE(Clip(PATH_IMG) & ' - not right size')
.
FreeImage_UnLoad(pImage)
Else
MESSAGE('Image can not be loaded')
.
Последний раз редактировалось seawolf 21 Март 2012, 11:27, всего редактировалось 1 раз.
Re: FreeImage
Фрагментик из действующей программы. Фотка обрезается по формату 4x3
W#=cfiObject4.iImage.GetWidth()
H#=cfiObject4.iImage.GetHeight()
!
If H#>W# * 0.75
NewH#=W# * 0.75
cfiObject4.iImage.Crop(0,(H#-NewH#)/2,W#,NewH#)
Elsif H#<W# * 0.75
NewW#=H# / 0.75
cfiObject4.iImage.Crop((W#-NewW#)/2,H#,NewW#,H#)
End
И масштабируется по размеру 352 x 264 пиксела, после чего сохраняется.
cfiObject4.iImageControl.Reset()
W=352
H=264
cfiObject4.iImage.Rescale(W,H,2)
FileName= Main:Id & '_' & MIM:Id & '.jpg'
FileName=LongPath() & '\Image\' & fileName
cfiObject4.iImage.Save(FileName,2)
W#=cfiObject4.iImage.GetWidth()
H#=cfiObject4.iImage.GetHeight()
!
If H#>W# * 0.75
NewH#=W# * 0.75
cfiObject4.iImage.Crop(0,(H#-NewH#)/2,W#,NewH#)
Elsif H#<W# * 0.75
NewW#=H# / 0.75
cfiObject4.iImage.Crop((W#-NewW#)/2,H#,NewW#,H#)
End
И масштабируется по размеру 352 x 264 пиксела, после чего сохраняется.
cfiObject4.iImageControl.Reset()
W=352
H=264
cfiObject4.iImage.Rescale(W,H,2)
FileName= Main:Id & '_' & MIM:Id & '.jpg'
FileName=LongPath() & '\Image\' & fileName
cfiObject4.iImage.Save(FileName,2)
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: FreeImage
В идеале конечно что бы область для кропа к примеру 600х600 можно было бы по фотке таскать. И при необходимости тут же уменьшать фотку что бы кроп был красивый...
Фотки для программы кадров и т.д. делать.
Всем спасибо. Посмотрю.
Фотки для программы кадров и т.д. делать.
Всем спасибо. Посмотрю.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3291
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: FreeImage
Мы с помощью шаблонов ProScan такое делаем - моментальное фото с видеокамеры с возможностью редактирования (crop и всё такое прочее, целый редактор встроенный). Причём источник может быть не только камера, а практически всё.
С уважением, ДП
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: FreeImage
Хотел сначала с помощью FreeImage сделать но по итогу сделал на ImageEx.
Получилось примерно вот так:
Получилось примерно вот так:
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 1039
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Re: FreeImage -> ImageEx Crop&Save фотографии
http://downloads.sourceforge.net/freeim ... ge3153.pdf страница 99 (103 в STDU Viewer)Admin писал(а): CROP для jpeg файла
FreeImage_JPEGCrop и FreeImage_JPEGCropU
ну и обновление там http://freeimage.sourceforge.net/index.html
March 17th, 2012
FreeImage 3.15.3 released
Release 3.15.3 is a maintenance release that mainly fix 64-bit compilation issues.
The library has been updated with the new LibPNG (1.5.9), LibTIFF (4.0.1). FreeImage is also distributed with an updated VB6 wrapper.
As usual, check the changes log for full details (especially for bug fixes) and check also the updated FreeImage documentation.
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: FreeImage -> ImageEx Crop&Save фотографии
Спасибо. Но то что сделал уже нравится 
А лишняя библиотека (точнее 3) сильно не парит.

А лишняя библиотека (точнее 3) сильно не парит.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса