Во всех примерах на форуме изменение высоты/ширины картинок производится при помощи функции _GDIPlus_GetImageThumbnail. Но я обнаружил, что такая функция часто (но не всегда) сильно "портит" качество картинки.
Вот код:
Файл test.jpg: http://ifolder.ru/29165335 . Он точно таких же размеров в пикселях, как и тот, который получится после работы скрипта. Но перемасштабирование превращает файл вот в такое (слева исходный файл, справа - после работы скрипта):
При этом портит файл именно перемасштабирование, а не сохранение с каким-либо уровнем качества (я проверял - отключал перемасштабирование и оставлял только пересохранение).
При попытке открыть получившееся изображение в фотошопе я получаю следующее сообщение: "Pixel aspect ratio correction is for preview purposes only. Turn it off for maximum image quality".
Может кто-нибудь подсказать, как исправить эту ситуацию? Как отключить этот самый pixel aspect ratio correction и почему он вообще включился?
Спасибо.
Вот код:
Код:
#include "File.au3"
#Include "GDIPlus.au3"
_GDIPlus_Startup()
$CurImage = _GDIPlus_ImageLoadFromFile("test.jpg")
$sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
$NewSizeW = Round((_GDIPlus_ImageGetWidth($CurImage) * 600) / _GDIPlus_ImageGetHeight($CurImage))
$NewImage = _GDIPlus_GetImageThumbnail($CurImage, $NewSizeW, 600)
If FileExists("result.jpg") Then FileRecycle("result.jpg")
$tParams = _GDIPlus_ParamInit (1)
$tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", 100)
$pData = DllStructGetPtr($tData)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
$pParams = DllStructGetPtr($tParams)
_GDIPlus_ImageSaveToFileEx($NewImage, "result.jpg", $sCLSID, DllStructGetPtr($tParams))
_GDIPlus_ImageDispose($CurImage)
;_GDIPlus_ImageDispose($NewImage)
_GDIPlus_Shutdown()
Func _GDIPlus_GetImageThumbnail($hImage, $iWidth, $iHeight)
Local $Ret = DllCall($ghGDIPDll, 'int', 'GdipGetImageThumbnail', 'ptr', $hImage, 'int', _
$iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)
If (@error) Or ($Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[4]
EndFunc ;==>_GDIPlus_GetImageThumbnail
Файл test.jpg: http://ifolder.ru/29165335 . Он точно таких же размеров в пикселях, как и тот, который получится после работы скрипта. Но перемасштабирование превращает файл вот в такое (слева исходный файл, справа - после работы скрипта):
При этом портит файл именно перемасштабирование, а не сохранение с каким-либо уровнем качества (я проверял - отключал перемасштабирование и оставлял только пересохранение).
При попытке открыть получившееся изображение в фотошопе я получаю следующее сообщение: "Pixel aspect ratio correction is for preview purposes only. Turn it off for maximum image quality".
Может кто-нибудь подсказать, как исправить эту ситуацию? Как отключить этот самый pixel aspect ratio correction и почему он вообще включился?
Спасибо.