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

Programlama dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
anxious
Byte2
Byte2
Mesajlar: 84
Kayıt: 11 Mar 2015, 07:56

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

Mesaj gönderen anxious » 15 Kas 2018, 13:21

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



Kullanıcı avatarı
BlueLife
Byte4
Byte4
Mesajlar: 174
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen BlueLife » 16 Kas 2018, 11:57

@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

anxious
Byte2
Byte2
Mesajlar: 84
Kayıt: 11 Mar 2015, 07:56

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen anxious » 16 Kas 2018, 17:36

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

shampuan
Megabyte3
Megabyte3
Mesajlar: 1263
Kayıt: 13 Tem 2018, 17:11

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen shampuan » 16 Kas 2018, 17:46

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.

anxious
Byte2
Byte2
Mesajlar: 84
Kayıt: 11 Mar 2015, 07:56

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen anxious » 16 Kas 2018, 18:04

@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ç :)

shampuan
Megabyte3
Megabyte3
Mesajlar: 1263
Kayıt: 13 Tem 2018, 17:11

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen shampuan » 16 Kas 2018, 18:34

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.

Kullanıcı avatarı
BlueLife
Byte4
Byte4
Mesajlar: 174
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen BlueLife » 17 Kas 2018, 11:12

@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

anxious
Byte2
Byte2
Mesajlar: 84
Kayıt: 11 Mar 2015, 07:56

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen anxious » 17 Kas 2018, 14:00

Teşekkürler @BlueLife son verdiğinizi dikkatlice kontrol etip öğrenip geliştireceğim saolun tekrardan.

Cevapla