Помогите, плиз.
Берется картинка, загружается в память, перемасштабируется (так, чтобы высота была 600 пикселей), сохраняется с качеством 90% под новым именем. И теперь нужно удалить исходный файл, а никак :(
Подскажите, плиз, что я делаю не так? FileRecycle или FileDelete - без разницы, не удаляет ни та, ни другая.
И заодно есть вопрос по оптимизации этого скрипта. Плоховато я пока понимаю те параметры, которые можно задавать в _GDIPlus_ImageSaveToFileEx. Наверняка там можно задать перемасштабирование картинки при сохранении, там же есть параметр $GDIP_EPGTRANSFORMATION. Вот только как им пользоваться, примерчик не дадите? Именно для изменения размеров картинки.
Тогда можно будет от отдельной процедуры по перемасштабированию отказаться, тем более что она несколько кривоватая, периодически очень сильно портит качество джипегов. Например, вот такой: http://ifolder.ru/29155903 . И это, фактически, третий мой вопрос. Может, надо какие-то еще параметры при сохранении картинок поправить, чтобы сохранить исходное качество при перемасштабировании?
Буду благодарен любой помощи.
Берется картинка, загружается в память, перемасштабируется (так, чтобы высота была 600 пикселей), сохраняется с качеством 90% под новым именем. И теперь нужно удалить исходный файл, а никак :(
Код:
#include "File.au3"
#Include "GDIPlus.au3"
$NewSizeH = 600
_GDIPlus_Startup()
$CurImage = _GDIPlus_ImageLoadFromFile("1.jpg")
$NewSizeW = Round((_GDIPlus_ImageGetWidth($CurImage) * 600) / _GDIPlus_ImageGetHeight($CurImage))
$CurImage = _GDIPlus_GetImageThumbnail($CurImage, $NewSizeW, $NewSizeH)
If FileExists("2.jpg") Then FileRecycle("2.jpg")
$sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
$tParams = _GDIPlus_ParamInit (1)
$tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", 90)
$pData = DllStructGetPtr($tData)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
$pParams = DllStructGetPtr($tParams)
_GDIPlus_ImageSaveToFileEx($CurImage, "2.jpg", $sCLSID, DllStructGetPtr($tParams))
_GDIPlus_ImageDispose($CurImage)
_GDIPlus_Shutdown()
$TestCount = 0
While Not FileRecycle("1.jpg")
sleep(100)
$TestCount += 1
MsgBox(4096,"Test",$TestCount & " неудачных попыток удалить файл")
WEnd
Exit
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
Подскажите, плиз, что я делаю не так? FileRecycle или FileDelete - без разницы, не удаляет ни та, ни другая.
И заодно есть вопрос по оптимизации этого скрипта. Плоховато я пока понимаю те параметры, которые можно задавать в _GDIPlus_ImageSaveToFileEx. Наверняка там можно задать перемасштабирование картинки при сохранении, там же есть параметр $GDIP_EPGTRANSFORMATION. Вот только как им пользоваться, примерчик не дадите? Именно для изменения размеров картинки.
Тогда можно будет от отдельной процедуры по перемасштабированию отказаться, тем более что она несколько кривоватая, периодически очень сильно портит качество джипегов. Например, вот такой: http://ifolder.ru/29155903 . И это, фактически, третий мой вопрос. Может, надо какие-то еще параметры при сохранении картинок поправить, чтобы сохранить исходное качество при перемасштабировании?
Буду благодарен любой помощи.