Показать полную графическую версию : [решено] Изменение размера jpg, bmp
Приветствую, возможно ли изменять размеры "рисунков" в 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
возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ? »
Изменение размеров без изменения качества изображения невозможно. Причём "изменение" здесь — это отнюдь не улучшение: это от почти незаметного до очень заметного ухудшения.
-TRM-, рисунков какого размера?
Iska, я даже не стал задавать этот вопрос. Ответ одинаков. :)
возможно ли изменять размеры "рисунков" в 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.
Так это же сохраняет в миниатюрную копию (thumbnail) »
Я даже не поглядел код :(.
И формат нужно сохранять тот же »
Нарушил ваше условие, загнал картинку в jpg и указал на выходе bmp - вроде как получил на выходе реальный bmp.
вроде как получил на выходе реальный bmp »
Без потери качества?
Без потери качества? »
А где ему там теряться?
Без потери качества? »
Да.
Пока над этим не размышлял, но может уже у кого то есть готовое решение ? Как в скрипте предложенным от Creat0R сделать так, чтобы высота была пропорциональна ширине т.е. она не обязательно должна быть 480 иначе картинка растягивается ?
сделать так, чтобы высота была пропорциональна ширине »
#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)
Это в два раза уменьшит размер.
Можно ещё так (с возможностью указать фиксированную ширину):
#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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.