Search the Community
Showing results for tags 'filesize'.
-
_ImageResize fonksiyonunu birçok kişi bilir. Fonksiyonu geliştirerek, belirtilen dosyayı belirtilen boyuta indirgemek için ek bir fonksiyon yazdım. Maximum dosya boyutu koşulu sunan servisler için kullanılması amaçlanarak yazılmıştır. Örneğin Windows logon ekranı için en fazla 245KB boyutunda bir grafik koyabilirsiniz. Bu gibi durumlarda bu fonksiyon işimize yaramaktadır. Fonksiyon belirttiğiniz resim dosyasını en*boy oranını koruyarak adım adım küçültür, ta ki istediğimiz boyuta gelene kadar. Fonksiyon; Func _ResizeToSize($Input, $Output, $ToSize) $Temp = _TempFile(@TempDir & "\", "", ".jpg") FileCopy($Input, $Temp, 9) $Size = FileGetSize($Temp) $Boyutlar = _GetWHI($File) While $Size >= $ToSize _ImageResize($Input, $Temp, Floor($Boyutlar[0] / 1.05), Floor($Boyutlar[1] / 1.05)) $Boyutlar = _GetWHI($Temp) $Size = FileGetSize($Temp) WEnd FileMove($Temp, $Output, 9) EndFunc ;==>_ResizeToSize Parametreler; $Input = İşlenecek dosyanın tam yolu (Örn : C:\deneme.jpg) $Output = İşlem sonrası kaydedilecek dosya (Örn : C:\deneme_resized.jpg) $ToSize = Kilobyte cinsinden belirleyeceğiniz dosya boyutu (Örn : 250) Gerekli Diğer Fonksiyonlar ; Func _GetWHI($sImage) Local $HIMAGE, $aRet[3] _GDIPlus_Startup() $HIMAGE = _GDIPlus_ImageLoadFromFile($sImage) $aRet[0] = _GDIPlus_ImageGetWidth($HIMAGE) $aRet[1] = _GDIPlus_ImageGetHeight($HIMAGE) $aRet[2] = _GDIPlus_BitmapCreateHBITMAPFromBitmap($HIMAGE) _GDIPlus_ImageDispose($HIMAGE) _GDIPlus_Shutdown() Return $aRet EndFunc ;==>_GetWHI Func _ImageResize($sInImage, $sOutImage, $iW, $iH) Local $sOP, $sOF, $sInExt, $Ext, $hBitmap, $hImage1, $hImage2, $hGraphic, $CLSID, $i = 0 Local $sType = "BMP|GIF|ICO|JPG|JPEG|PNG|TIF|TIFF" If Not FileExists($sInImage) Then Return SetError(1, 0, 0) $sInExt = StringUpper(StringTrimLeft($sInImage, StringInStr($sInImage, ".", 0, -1))) If Not StringRegExp($sInExt, "\A(" & $sType & ")\z", 0) Then Return SetError(2, 0, 0) $sOP = StringLeft($sOutImage, StringInStr($sOutImage, "\", 0, -1)) If Not FileExists($sOP) Then Return SetError(3, 0, 0) $sOF = StringTrimLeft($sOutImage, StringInStr($sOutImage, "\", 0, -1)) $Ext = StringUpper(StringTrimLeft($sOutImage, StringInStr($sOutImage, ".", 0, -1))) If Not StringRegExp($Ext, "\A(" & $sType & ")\z", 0) Or $Ext = "ICO" Then Return SetError(4, 0, 0) If Not IsInt($iW) And Not IsInt($iH) Then Return SetError(5, 0, 0) $hBitmap = _WinAPI_CreateBitmap($iW, $iH, 1, 32) _GDIPlus_Startup() $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) $hImage2 = _GDIPlus_ImageLoadFromFile($sInImage) $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1) _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 2) _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage2, 0, 0, $iW, $iH) $CLSID = _GDIPlus_EncodersGetCLSID($Ext) Do $i += 1 Until (Not FileExists($sOP & $i & "_" & $sOF)) $sOutImage = $sOP & $sOF _GDIPlus_GraphicsSetInterpolationMode($hImage1, 2) _GDIPlus_ImageSaveToFileEx($hImage1, $sOutImage, $CLSID) _GDIPlus_ImageDispose($hImage1) _GDIPlus_ImageDispose($hImage2) _GDIPlus_GraphicsDispose($hGraphic) _WinAPI_DeleteObject($hBitmap) _GDIPlus_Shutdown() Return SetError(0, 0, 1) EndFunc ;==>_ImageResize Örnek Kullanım ; $File = @DesktopDir & "\test.jpg" ; full path of file to resize $MaxSize = 250 ; as kilobyte If FileExists($File) And IsNumber($MaxSize) Then $tim = TimerInit() _ResizeToSize($File, @DesktopDir & "\resized.jpg", $MaxSize*1024) MsgBox(64, "Geçen süre", Floor(TimerDiff($tim)) / (1000) & " saniye") Else MsgBox(48,"","hata") EndIf :download1: