Войти

Показать полную графическую версию : [решено] Изменение размера jpg, bmp


-TRM-
27-02-2019, 11:44
Приветствую, возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ?
Пробовал так, но качество сильно ухудшается.

#include <GDIPlus.au3>
Func Pic_Image($PIC_Load, $Pic_Save, $Pic_Horizontal, $Pic_Vertikal)
FileDelete($Pic_Save)
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($PIC_Load)
;$H = _GDIPlus_ImageGetHeight($hImage)
;$W = _GDIPlus_ImageGetWidth($hImage)
;ConsoleWrite('$H='&$H&@CR)
;ConsoleWrite('$W='&$W&@CR)

; $H1 =$Wnew
; $W1 =$Wnew / $H * $W


$hThumb = _GDIPlus_ImageGetThumbnail($hImage, $Pic_Horizontal, $Pic_Vertikal)
_GDIPlus_ImageSaveToFile($hThumb, $Pic_Save)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ImageDispose($hThumb)
_GDIPlus_Shutdown()
EndFunc

Pic_Image("с:\6.jpg", "с:\background.bmp", 640, 480)

Только нужно чтобы выходной файл был в формате BMP

mwz
27-02-2019, 16:09
возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ? »

Изменение размеров без изменения качества изображения невозможно. Причём "изменение" здесь — это отнюдь не улучшение: это от почти незаметного до очень заметного ухудшения.

Iska
27-02-2019, 19:11
-TRM-, рисунков какого размера?

mwz
27-02-2019, 20:10
Iska, я даже не стал задавать этот вопрос. Ответ одинаков. :)

Creat0R
27-02-2019, 20:14
возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ? »
Если уменьшать то можно, если увеличивать то нет.

Пробовал так »
Так это же сохраняет в миниатюрную копию (thumbnail), т.е то что обычно используется для предпросмотра, а нужно использовать ImageResize:

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) Pic_Image($PIC_Load, $Pic_Save, $Pic_Horizontal, $Pic_Vertikal)
FileDelete (http://www.autoitscript.com/autoit3/docs/functions/FileDelete.htm)($Pic_Save)
_GDIPlus_Startup (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Startup.htm)()
$hImage = _GDIPlus_ImageLoadFromFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageLoadFromFile.htm)($PIC_Load)
$hResized = _GDIPlus_ImageResize (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageResize.htm)($hImage, $Pic_Horizontal, $Pic_Vertikal)
_GDIPlus_ImageSaveToFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageSaveToFile.htm)($hResized, $Pic_Save)
_GDIPlus_ImageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hImage)
_GDIPlus_ImageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hResized)
_GDIPlus_Shutdown (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Shutdown.htm)()
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

И формат нужно сохранять тот же, иначе нужно использовать _GDIPlus_ImageSaveToFileEx.

Iska
27-02-2019, 20:18
Так это же сохраняет в миниатюрную копию (thumbnail) »
Я даже не поглядел код :(.

-TRM-
01-03-2019, 17:34
И формат нужно сохранять тот же »
Нарушил ваше условие, загнал картинку в jpg и указал на выходе bmp - вроде как получил на выходе реальный bmp.

Creat0R
02-03-2019, 01:27
вроде как получил на выходе реальный bmp »
Без потери качества?

Iska
02-03-2019, 02:53
Без потери качества? »
А где ему там теряться?

-TRM-
02-03-2019, 09:59
Без потери качества? »
Да.
Пока над этим не размышлял, но может уже у кого то есть готовое решение ? Как в скрипте предложенным от Creat0R сделать так, чтобы высота была пропорциональна ширине т.е. она не обязательно должна быть 480 иначе картинка растягивается ?

Creat0R
02-03-2019, 13:22
сделать так, чтобы высота была пропорциональна ширине »
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GDIPlus.au3>

_Image_Scale('Src.jpg', 'Dst.jpg', 0.5)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Image_Scale($sSrc_File, $sDest_File, $iScale)
_GDIPlus_Startup (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Startup.htm)()

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hImage = _GDIPlus_ImageLoadFromFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageLoadFromFile.htm)($sSrc_File)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hResized = _GDIPlus_ImageScale (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageScale.htm)($hImage, $iScale, $iScale)

_GDIPlus_ImageSaveToFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageSaveToFile.htm)($hResized, $sDest_File)

_GDIPlus_imageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hImage)
_GDIPlus_ImageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hResized)

_GDIPlus_Shutdown (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Shutdown.htm)()
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Это в два раза уменьшит размер.

Creat0R
02-03-2019, 14:18
Можно ещё так (с возможностью указать фиксированную ширину):

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GDIPlus.au3>

_Image_Scale('Src.jpg', 'Dst.jpg', 400)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Image_Scale($sSrc_File, $sDest_File, $iWidth, $iHeight = -1)
_GDIPlus_Startup (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Startup.htm)()

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hImage = _GDIPlus_ImageLoadFromFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageLoadFromFile.htm)($sSrc_File)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iImg_W = _GDIPlus_ImageGetWidth (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageGetWidth.htm)($hImage)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iImg_H = _GDIPlus_ImageGetHeight (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageGetHeight.htm)($hImage)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iScale, $hResized

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iHeight = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iScale = (100 / $iImg_W * $iWidth) / 100
$hResized = _GDIPlus_ImageScale (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageScale.htm)($hImage, $iScale, $iScale)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$hResized = _GDIPlus_ImageResize (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageResize.htm)($hImage, $iWidth, $iHeight)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

_GDIPlus_ImageSaveToFile (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageSaveToFile.htm)($hResized, $sDest_File)

_GDIPlus_imageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hImage)
_GDIPlus_ImageDispose (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_ImageDispose.htm)($hResized)

_GDIPlus_Shutdown (http://www.autoitscript.com/autoit3/docs/libfunctions/_GDIPlus_Shutdown.htm)()
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)




© OSzone.net 2001-2012