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

Programlama ve Script dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
anxious
Byte3
Byte3
Mesajlar: 114
Kayıt: 11 Mar 2015, 07:56
Teşekkür edildi: 1 kez

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

Mesaj 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
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 269
Kayıt: 29 Ağu 2014, 20:42
Teşekkür etti: 14 kez
Teşekkür edildi: 24 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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
anxious
Byte3
Byte3
Mesajlar: 114
Kayıt: 11 Mar 2015, 07:56
Teşekkür edildi: 1 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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
Kullanıcı avatarı
shampuan
Petabyte4
Petabyte4
Mesajlar: 8798
Kayıt: 13 Tem 2018, 17:11
Teşekkür etti: 208 kez
Teşekkür edildi: 345 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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.
anxious
Byte3
Byte3
Mesajlar: 114
Kayıt: 11 Mar 2015, 07:56
Teşekkür edildi: 1 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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ç :)
Kullanıcı avatarı
shampuan
Petabyte4
Petabyte4
Mesajlar: 8798
Kayıt: 13 Tem 2018, 17:11
Teşekkür etti: 208 kez
Teşekkür edildi: 345 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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.
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 269
Kayıt: 29 Ağu 2014, 20:42
Teşekkür etti: 14 kez
Teşekkür edildi: 24 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj 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
anxious
Byte3
Byte3
Mesajlar: 114
Kayıt: 11 Mar 2015, 07:56
Teşekkür edildi: 1 kez

Re: Autoit Resimlere Watermark ekleme hakkında?

Mesaj gönderen anxious »

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