-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Изменение размера 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
|
Цитата:
Цитата -TRM-
возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ? »
|
Изменение размеров без изменения качества изображения невозможно. Причём "изменение" здесь — это отнюдь не улучшение: это от почти незаметного до очень заметного ухудшения.
|
-TRM-, рисунков какого размера?
|
Iska, я даже не стал задавать этот вопрос. Ответ одинаков. :)
|
Цитата:
Цитата -TRM-
возможно ли изменять размеры "рисунков" в 640*480 не теряя качества изображения ? »
|
Если уменьшать то можно, если увеличивать то нет.
Так это же сохраняет в миниатюрную копию (thumbnail), т.е то что обычно используется для предпросмотра, а нужно использовать ImageResize:
И формат нужно сохранять тот же, иначе нужно использовать _GDIPlus_ImageSaveToFileEx.
|
Цитата:
Цитата Creat0R
Так это же сохраняет в миниатюрную копию (thumbnail) »
|
Я даже не поглядел код :(.
|
Цитата:
Цитата Creat0R
И формат нужно сохранять тот же »
|
Нарушил ваше условие, загнал картинку в jpg и указал на выходе bmp - вроде как получил на выходе реальный bmp.
|
Цитата:
Цитата -TRM-
вроде как получил на выходе реальный bmp »
|
Без потери качества?
|
Да.
Пока над этим не размышлял, но может уже у кого то есть готовое решение ? Как в скрипте предложенным от Creat0R сделать так, чтобы высота была пропорциональна ширине т.е. она не обязательно должна быть 480 иначе картинка растягивается ?
|
Цитата:
Цитата -TRM-
сделать так, чтобы высота была пропорциональна ширине »
|
Это в два раза уменьшит размер.
|
Можно ещё так (с возможностью указать фиксированную ширину):
Код:
#include <GDIPlus.au3>
_Image_Scale('Src.jpg', 'Dst.jpg', 400)
Func _Image_Scale($sSrc_File, $sDest_File, $iWidth, $iHeight = -1)
_GDIPlus_Startup()
Local $hImage = _GDIPlus_ImageLoadFromFile($sSrc_File)
Local $iImg_W = _GDIPlus_ImageGetWidth($hImage)
Local $iImg_H = _GDIPlus_ImageGetHeight($hImage)
Local $iScale, $hResized
If $iHeight = -1 Then
$iScale = (100 / $iImg_W * $iWidth) / 100
$hResized = _GDIPlus_ImageScale($hImage, $iScale, $iScale)
Else
$hResized = _GDIPlus_ImageResize($hImage, $iWidth, $iHeight)
EndIf
_GDIPlus_ImageSaveToFile($hResized, $sDest_File)
_GDIPlus_imageDispose($hImage)
_GDIPlus_ImageDispose($hResized)
_GDIPlus_Shutdown()
EndFunc
|
Время: 05:14.
© OSzone.net 2001-