1. sayfa (Toplam 1 sayfa)

Çözüldü - Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 15 Kas 2018, 13:21
gönderen anxious
Arkadaşlar resimlere tek tek ve toplu watermark eklemeye çalışıyorum hem ön izleme yapamadım hemde toplu ekeleyemedim.ön izlemeyi yaparken formun tümünü kaplıyor.
Kodlarım

Kod: Tümünü seç

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Form1, $hImage, $hGraphic, $OpenPictures, $PicPreview
_GDIPlus_Startup()
$Form1 = GUICreate("Form1", 615, 438, 374, 347)
$PicPreview = GUICtrlCreatePic("", 24, 152, 572, 268)
$ButtonPreview = GUICtrlCreateButton("Preview", 520, 112, 75, 25)
$InputImageDir = GUICtrlCreateInput("", 64, 48, 177, 21)
$ButtonOpen = GUICtrlCreateButton("...", 256, 48, 75, 25)
$InputDistanceLeft = GUICtrlCreateInput("", 64, 96, 65, 21)
$InputDistanceButtom = GUICtrlCreateInput("", 144, 96, 57, 21)
$ButtonWatermark = GUICtrlCreateButton("Watermark Add", 256, 112, 80, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			_GDIPlus_GraphicsDispose($hGraphic)
			_GDIPlus_ImageDispose($hImage)
			_GDIPlus_Shutdown()
			Exit

		Case $ButtonOpen
			$OpenPictures = FileOpenDialog("Where are the pictures?", @ScriptDir & "\", "Picture format (*.jpg;*.bmp;*.png)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
			If Not $OpenPictures Then
				MsgBox(64, "İnfo", "No Files Selected!", 5)
			Else
				GUICtrlSetData($InputImageDir, $OpenPictures)
			EndIf

		Case $ButtonWatermark
			$aImageLoad = $OpenPictures
			$aImageSave = @ScriptDir & "\Save.png"
			$aImageLogo = @ScriptDir & "\Logo.png"
			_Watermark($aImageSave, $aImageLoad, $aImageLogo)

		Case $ButtonPreview
			$hImage = _GDIPlus_ImageLoadFromFile($aImageSave)
			$X1 = _GDIPlus_ImageGetWidth($hImage)
			$Y1 = _GDIPlus_ImageGetHeight($hImage)
			$X2 = _GDIPlus_ImageGetWidth($hImage)
			$Y2 = _GDIPlus_ImageGetHeight($hImage)
			$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
			$hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
			;$PicPreview = GUICtrlCreatePic("", 24, 152, 572, 268)
			_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 20, $Y1 - $Y2 - 30)
			;_GDIPlus_GraphicsDrawImage ($hGraphic, 24, 152, 572, 268)

	EndSwitch
WEnd

Func _Watermark($sFile2, $sFile, $sLogo)
	Local $hImage1, $hImage2, $hGraphic
	_GDIPlus_Startup()
	$hImage1 = _GDIPlus_ImageLoadFromFile($sFile) ; image
	$X1 = _GDIPlus_ImageGetWidth($hImage1)
	$Y1 = _GDIPlus_ImageGetHeight($hImage1)
	$hImage2 = _GDIPlus_ImageLoadFromFile($sLogo) ; logo
	$X2 = _GDIPlus_ImageGetWidth($hImage2)
	$Y2 = _GDIPlus_ImageGetHeight($hImage2)
	$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
	_GDIPlus_GraphicsDrawImage($hGraphic, $hImage2, 20, $Y1 - $Y2 - 30)
	_GDIPlus_ImageSaveToFile($hImage1, $sFile2) ; image watermarked
	_GDIPlus_ImageDispose($hImage1)
	_GDIPlus_ImageDispose($hImage2)
	_GDIPlus_Shutdown()
EndFunc   ;==>_Watermark

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 16 Kas 2018, 11:57
gönderen BlueLife
@anxious

Önizleme için resmi bir konuma kayıt edip, shellexecute ile varsayılan tanımlı program ile resmi görüntüleyebilirsin. Temp klasörüde kullanılabilir tabi.
Verdiğin örneğe ek yaptım, incelersin...

Kod: Tümünü seç

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $Select_Image, $Save_Image
Global $Target_Logo = @ScriptDir & "\Logo.png"

Global $Form1, $hImage, $hGraphic, $OpenPictures, $PicPreview
_GDIPlus_Startup()
$Form1 = GUICreate("Form1", 615, 438, 374, 347)
$PicPreview = GUICtrlCreatePic("", 24, 152, 572, 268)
$ButtonPreview = GUICtrlCreateButton("Preview", 520, 112, 75, 25)
$InputImageDir = GUICtrlCreateInput("", 64, 48, 177, 21)
$ButtonOpen = GUICtrlCreateButton("...", 256, 48, 75, 25)
Local $LogoLeft = GUICtrlCreateInput(-20, 64, 96, 65, 21)
Local $LogoTop = GUICtrlCreateInput(-20, 144, 96, 57, 21)
$ButtonWatermark = GUICtrlCreateButton("Watermark Add", 256, 112, 80, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			_GDIPlus_GraphicsDispose($hGraphic)
			_GDIPlus_ImageDispose($hImage)
			_GDIPlus_Shutdown()
			Exit

		Case $ButtonOpen
			$Select_Image = FileOpenDialog("Where are the pictures?", @ScriptDir & "\", "Picture format (*.jpg;*.bmp;*.png)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
			If Not $Select_Image Then
				MsgBox(64, "İnfo", $Select_Image, 5)
			Else
				GUICtrlSetData($InputImageDir, $Select_Image)
			EndIf

		Case $ButtonWatermark
			$Save_Image = _SimpleWatermark($Select_Image, $Target_Logo,"", Number(GUICtrlRead($LogoLeft)),Number(GUICtrlRead($LogoTop)))

		Case $ButtonPreview
			If FileExists($Save_Image) = 1 Then ShellExecute($Save_Image)
	EndSwitch
WEnd

Func _SimpleWatermark($SourceImage, $SourceLogo,$SaveImage = "", $X_POS = -20, $Y_POS = -30)
	If FileExists($SourceImage) = 0 Or FileExists($SourceLogo) = 0 Then Return SetError(1,0,"")

	_GDIPlus_Startup()
	Local $hImage1 = _GDIPlus_ImageLoadFromFile($SourceImage) ; image
	Local $X1 = _GDIPlus_ImageGetWidth($hImage1)
	Local $Y1 = _GDIPlus_ImageGetHeight($hImage1)
	Local $hImage2 = _GDIPlus_ImageLoadFromFile($SourceLogo) ; logo
	Local $X2 = _GDIPlus_ImageGetWidth($hImage2)
	Local $Y2 = _GDIPlus_ImageGetHeight($hImage2)
	Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

	If $X_POS < 0 Then $X_POS = ($X1 +$X_POS) - $X2
	If $Y_POS < 0 Then $Y_POS = ($Y1 + $Y_POS) - $Y2
	_GDIPlus_GraphicsDrawImage($hGraphic, $hImage2, $X_POS,$Y_POS) ;logo pozition

	If $SaveImage = "" Then
		Local $lTag = "_logo"
		Local $InStr = StringInStr($SourceImage,".",0,-1)
		If $InStr = 0 Then
			$SaveImage = $SourceImage & $lTag
		Else
			$InStr -=1
			$lTag &= StringTrimLeft($SourceImage,$InStr)
			$SaveImage = StringLeft($SourceImage,$InStr) & $lTag
		EndIf
	EndIf

	_GDIPlus_ImageSaveToFile($hImage1, $SaveImage) ; image watermarked
	_GDIPlus_ImageDispose($hImage1)
	_GDIPlus_ImageDispose($hImage2)
	_GDIPlus_Shutdown()

	Return $SaveImage
EndFunc   ;==>_Watermark

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 16 Kas 2018, 17:36
gönderen anxious
En başa şunu ekleyip Global $Target_Save = @ScriptDir & "\saveimage"
ve şurayıda böyle değiştirdim
Case $ButtonWatermark
$Save_Image = _SimpleWatermark($Select_Image, $Target_Logo, $Target_Save, Number(GUICtrlRead($LogoLeft)),Number(GUICtrlRead($LogoTop)))

Ama toplu olarak resimlere logo ekleme yapmıyor tektek yapıyor üstad

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 16 Kas 2018, 17:46
gönderen shampuan
Eğer kodlarla çalışmak çok önemli değilse,
Format Factory yazılımı resimlere toplu logo(watermark) ekliyordu sanırım. Bir bakıp sorunu çözmeyi deneyebilirsiniz.
Ya da içini açıp kodun nasıl çalıştığını görebilirsiniz.

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 16 Kas 2018, 18:04
gönderen anxious
@shampuan Teşekkür ederim öneriniz için evet bir çok yazılım mevcut bu konuda,yazdığınız gibi kodlarla çalışmak ve öğrenmek amaç :)

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 16 Kas 2018, 18:34
gönderen shampuan
Tamam anladım, kolay gelsin.
Toplu watermark basabilen açıkkaynak kodlu bir programı indirip toplu watermark basmayı kontrol eden kodları inceler nasıl çalıştığını az buçuk anlarsınız. Daha sonra da hangi programlama dili ile çalışıyorsanız ona uyarlamaya çalışırsınız olmaz mı?
XnConvert programı açıkkaynak - özgür bir program. Dilerseniz içini açıp kurcalama hakkınız yasal olarak var. Madem öğrenmek istiyorsunuz, kopya çekerek öğrenmek de etkili bir öğrenme metodu. Olabilirliği varsa,
Xnconverti kurup çalıştırın.
Görevler sekmesine gelin.
Hemen başlık çubuğunun altında solda "Görev ekle" yazıyor. Buna basınca bir fonksiyon ağacı açılır oradan "filigran" seçeneğine dikkat edin. istediğiniz işi görüyorsa, programı açıp bu fonksiyonu bulabilir ve nasıl çalıştığına bakabilirsiniz.

Ben tek satır kod yazmayı bilmem. Bu nedenle elimden ancak bu kadar :)
Kolay gelsin der ve çekilirim.

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 17 Kas 2018, 11:12
gönderen BlueLife
@anxious

Geç yanıt için kusura bakma. Programa resimlere ait klasörü girip, bunun içinden resim dosyalarını bulup işlem yaptırabilirsin. Kodlarına tekrar ek yaptım. Çok fazla incelemedim kodları. Sen kendine göre ayarlarsın. Kolay gelsin...

Kod: Tümünü seç

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $Select_Image_Path,$Save_Image_Path, $Save_Image
Global $Target_Logo = @ScriptDir & "\Logo.png"

Global $Form1 = GUICreate("Form1", 615, 438, 374, 347)
Global $PicPreview = GUICtrlCreatePic("", 24, 152, 572, 268)
Global $ButtonPreview = GUICtrlCreateButton("Preview", 520, 112, 75, 25)
Global $InputImageDir = GUICtrlCreateInput("", 64, 48, 177, 21,0x0800)
Global $ButtonOpen = GUICtrlCreateButton("...", 256, 48, 75, 25)
Global $LogoLeft = GUICtrlCreateInput(-20, 64, 96, 65, 21)
Global $LogoTop = GUICtrlCreateInput(-20, 144, 96, 57, 21)
Global $ButtonWatermark = GUICtrlCreateButton("Watermark Add", 256, 112, 80, 25)
GUISetState(@SW_SHOW)

Local $FileSearch,$FileFind,$InStr,$FileEx, $Left_Pos, $Top_Post
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $ButtonOpen
			$Select_Image_Path = FileSelectFolder("Resim Klasörünü Seç", "", 4, @ScriptDir, $Form1)
			If StringLen($Select_Image_Path) = 0 Then
				MsgBox(64, "İnfo", "Resim KLasörünü Seçiniz", 10,$Form1)
			Else
				GUICtrlSetData($InputImageDir, $Select_Image_Path)
			EndIf
		Case $ButtonWatermark
			If StringLen($Select_Image_Path) = 0 Or FileExists($Select_Image_Path) = 0 Then
				MsgBox(64, "İnfo", "Resim KLasörünü Seçiniz", 10,$Form1)
				ContinueLoop
			EndIf
			$Save_Image = ""
			$Left_Pos = Number(GUICtrlRead($LogoLeft))
			$Top_Post = Number(GUICtrlRead($LogoTop))

			If StringRight($Select_Image_Path, 1) <> "\" Then $Select_Image_Path &= "\"
			$Save_Image_Path = $Select_Image_Path & "_WaterMark\"

			$FileSearch = FileFindFirstFile($Select_Image_Path & "*")
			If $FileSearch <> -1 Then
				While 1
					$FileFind = FileFindNextFile($FileSearch)
					If @error Then ExitLoop
					If @extended <> 0 Then ContinueLoop ;0 = file, 1 = Folder

					$InStr = StringInStr($FileFind,".",0,-1)
					If $InStr = 0 Then ContinueLoop
					$FileEx = StringTrimLeft($FileFind,$InStr-1)

					If StringInStr("|.jpg|.bmp|.png|","|" & $FileEx & "|") = 0 Then ContinueLoop
					If FileExists($Save_Image_Path) = 0 Then DirCreate($Save_Image_Path)

					$Save_Image = _SimpleWatermark($Select_Image_Path & $FileFind, $Target_Logo,$Save_Image_Path & $FileFind,$Left_Pos ,$Top_Post)
				Wend
			EndIf
			If StringLen($Save_Image) = 0 Then
				MsgBox(64, "İnfo", "Resim KLasörünü Seçiniz", 10,$Form1)
			Else
				MsgBox(64, "İnfo", $Save_Image_Path & @crlf &"Resimler kayıt edildi!", 10,$Form1)
			EndIf
		Case $ButtonPreview
			If FileExists($Save_Image) = 1 Then ShellExecute($Save_Image)
	EndSwitch
WEnd

Func _SimpleWatermark($SourceImage, $SourceLogo,$SaveImage = "", $X_POS = -20, $Y_POS = -30)
	If FileExists($SourceImage) = 0 Or FileExists($SourceLogo) = 0 Then Return SetError(1,0,"")

	_GDIPlus_Startup()
	Local $hImage1 = _GDIPlus_ImageLoadFromFile($SourceImage) ; image
	Local $X1 = _GDIPlus_ImageGetWidth($hImage1)
	Local $Y1 = _GDIPlus_ImageGetHeight($hImage1)
	Local $hImage2 = _GDIPlus_ImageLoadFromFile($SourceLogo) ; logo
	Local $X2 = _GDIPlus_ImageGetWidth($hImage2)
	Local $Y2 = _GDIPlus_ImageGetHeight($hImage2)
	Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

	If $X_POS < 0 Then $X_POS = ($X1 +$X_POS) - $X2
	If $Y_POS < 0 Then $Y_POS = ($Y1 + $Y_POS) - $Y2
	_GDIPlus_GraphicsDrawImage($hGraphic, $hImage2, $X_POS,$Y_POS) ;logo pozition

	If $SaveImage = "" Then
		Local $lTag = "_logo"
		Local $InStr = StringInStr($SourceImage,".",0,-1)
		If $InStr = 0 Then
			$SaveImage = $SourceImage & $lTag
		Else
			$InStr -=1
			$lTag &= StringTrimLeft($SourceImage,$InStr)
			$SaveImage = StringLeft($SourceImage,$InStr) & $lTag
		EndIf
	EndIf

	_GDIPlus_ImageSaveToFile($hImage1, $SaveImage) ; image watermarked
	_GDIPlus_ImageDispose($hImage1)
	_GDIPlus_ImageDispose($hImage2)
	_GDIPlus_Shutdown()

	Return $SaveImage
EndFunc   ;==>_Watermark

Re: Autoit Resimlere Watermark ekleme hakkında?

Gönderilme zamanı: 17 Kas 2018, 14:00
gönderen anxious
Teşekkürler @BlueLife son verdiğinizi dikkatlice kontrol etip öğrenip geliştireceğim saolun tekrardan.