¿Alguien sabe? Desea poder sobreponer una imagen con otra imagen como marca de agua, también para hacer grandes lotes. Cualquier tipo de biblioteca existente o una técnica que conozcas sería genial.¿La mejor manera de estampar una imagen con otra imagen para crear una marca de agua en ASP.NET?
6
A
Respuesta
13
3
He tenido buena suerte con ImageMagick. Tiene un API for .NET también.
3
Aquí está mi artículo completo: http://forums.asp.net/p/1323176/2634923.aspx
utilizar el SDK Command Prompt y navegar por la carpeta activa a la carpeta que contiene el código fuente de abajo ... a continuación, compilar el código utilizando
vbc.exe watermark.vb /t:exe /out:watermark.exe
esta voluntad crea un exe en la carpeta ... el exe acepta dos parámetros: ej.
watermark.exe "c:\source folder" "c:\destination folder"
esto va a iterar a través de la carpeta principal y todas las subcarpetas. todos los jpegs encontrados se marcarán con una marca de agua con la imagen que especifique en el código y se copiarán en la carpeta de destino. La imagen original permanecerá intacta.
// watermark.vb -
Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.IO
Namespace WatermarkManager
Class Watermark
Shared sourceDirectory As String = "", destinationDirectory As String = ""
Overloads Shared Sub Main(ByVal args() As String)
'See if an argument was passed from the command line
If args.Length = 2 Then
sourceDirectory = args(0)
destinationDirectory = args(1)
' make sure sourceFolder is legit
If Directory.Exists(sourceDirectory) = False
TerminateExe("Invalid source folder. Folder does not exist.")
Exit Sub
End If
' try and create destination folder
Try
Directory.CreateDirectory(destinationDirectory)
Catch
TerminateExe("Error creating destination folder. Invalid path cannot be created.")
Exit Sub
End Try
' start the magic
CreateHierarchy(sourceDirectory,destinationDirectory)
ElseIf args.Length = 1
If args(0) = "/?"
DisplayHelp()
Else
TerminateExe("expected: watermark.exe [source path] [destination path]")
End If
Exit Sub
Else
TerminateExe("expected: watermark.exe [source path] [destination path]")
Exit Sub
End If
TerminateExe()
End Sub
Shared Sub CreateHierarchy(ByVal sourceDirectory As String, ByVal destinationDirectory As String)
Dim tmpSourceDirectory As String = sourceDirectory
' copy directory hierarchy to destination folder
For Each Item As String In Directory.GetDirectories(sourceDirectory)
Directory.CreateDirectory(destinationDirectory + Item.SubString(Item.LastIndexOf("\")))
If hasSubDirectories(Item)
CreateSubDirectories(Item)
End If
Next
' reset destinationDirectory
destinationDirectory = tmpSourceDirectory
' now that folder structure is set up, let's iterate through files
For Each Item As String In Directory.GetDirectories(sourceDirectory)
SearchDirectory(Item)
Next
End Sub
Shared Function hasSubDirectories(ByVal path As String) As Boolean
Dim subdirs() As String = Directory.GetDirectories(path)
If subdirs.Length > 0
Return True
End If
Return False
End Function
Shared Sub CheckFiles(ByVal path As String)
For Each f As String In Directory.GetFiles(path)
If f.SubString(f.Length-3).ToLower = "jpg"
WatermarkImage(f)
End If
Next
End Sub
Shared Sub WatermarkImage(ByVal f As String)
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(f)
Dim graphic As Graphics
Dim indexedImage As New Bitmap(img)
graphic = Graphics.FromImage(indexedImage)
graphic.DrawImage(img, 0, 0, img.Width, img.Height)
img = indexedImage
graphic.SmoothingMode = SmoothingMode.AntiAlias
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic
Dim x As Integer, y As Integer
Dim source As New Bitmap("c:\watermark.png")
Dim logo As New Bitmap(source, CInt(img.Width/3), CInt(img.Width/3))
source.Dispose()
x = img.Width - logo.Width
y = img.Height - logo.Height
graphic.DrawImage(logo, New Point(x,y))
logo.Dispose()
img.Save(destinationDirectory+f.SubString(f.LastIndexOf("\")), ImageFormat.Jpeg)
indexedImage.Dispose()
img.Dispose()
graphic.Dispose()
Console.WriteLine("successfully watermarked " + f.SubString(f.LastIndexOf("\")+1))
Console.WriteLine("saved to: " + vbCrLf + destinationDirectory + vbCrLf)
End Sub
Shared Sub SearchDirectory(ByVal path As String)
destinationDirectory = destinationDirectory + path.SubString(path.LastIndexOf("\"))
CheckFiles(path)
For Each Item As String In Directory.GetDirectories(path)
destinationDirectory += Item.SubString(Item.LastIndexOf("\"))
CheckFiles(Item)
If hasSubDirectories(Item)
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
SearchDirectory(Item)
destinationDirectory += Item.SubString(Item.LastIndexOf("\"))
End If
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
Next
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
End Sub
Shared Sub CreateSubDirectories(ByVal path As String)
destinationDirectory = destinationDirectory + path.SubString(path.LastIndexOf("\"))
For Each Item As String In Directory.GetDirectories(path)
destinationDirectory += Item.SubString(Item.LastIndexOf("\"))
Directory.CreateDirectory(destinationDirectory)
Console.WriteLine(vbCrlf + "created: " + vbCrlf + destinationDirectory)
If hasSubDirectories(Item)
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
CreateSubDirectories(Item)
destinationDirectory += Item.SubString(Item.LastIndexOf("\"))
End If
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
Next
destinationDirectory = destinationDirectory.SubString(0,destinationDirectory.LastIndexOf("\"))
End Sub
Shared Sub TerminateExe(ByVal Optional msg As String = "")
If msg ""
Console.WriteLine(vbCrLf + "AN ERROR HAS OCCURRED //" + vbCrLf + msg)
End If
Console.WriteLine(vbCrLf + "Press [enter] to close...")
'Console.Read()
End Sub
Shared Sub DisplayHelp()
Console.WriteLine("watermark.exe accepts two parameters:" + vbCrLf + " - [source folder]")
Console.WriteLine(" - [destination folder]")
Console.WriteLine("ex." + vbCrLf + "watermark.exe ""c:\web_projects\dclr source"" ""d:\new_dclr\copy1 dest""")
Console.WriteLine(vbCrLf + "Press [enter] to close...")
Console.Read()
End Sub
End Class
End Namespace
Cuestiones relacionadas
- 1. agregando una imagen de marca de agua a una imagen
- 2. iPhone, ¿cómo se superpone una imagen a otra para crear una nueva imagen para guardar? (marca de agua)
- 3. Agregar una marca de agua de imagen invisible en C#?
- 4. agregar una imagen pequeña de marca de agua a una imagen grande opencv4android
- 5. Coloque la marca de agua en otras imágenes (C#, ASP.Net)
- 6. Marca de agua con PDFBox
- 7. ¿Cómo repito una imagen de marca de agua con GD y PHP?
- 8. ¿Cómo podría agregar un efecto de marca de agua a una imagen en Android?
- 9. La mejor manera de escribir una imagen en Django HttpResponse()
- 10. ¿La mejor manera de crear una página ASP.NET para imprimir?
- 11. OpenCV dibujar una imagen sobre otra imagen
- 12. Copie una parte específica de una imagen de almacenamiento intermedio en otra imagen de almacenamiento intermedio
- 13. ¿La mejor manera de rotar una imagen usando SDL?
- 14. Objetivo-C: comparar una imagen con otra imagen guardada previamente
- 15. Marca de agua en System.Windows.Forms.TextBox
- 16. C# copiar pegar una región de imagen en otra imagen
- 17. Superposición de una imagen sobre otra imagen en iOS
- 18. Buscar una imagen dentro de una imagen
- 19. asp.net mvc 3: mejor manera de administrar un modelo con una imagen
- 20. Adición de marca de agua de imagen a Pdf mientras se crea utilizando iTextSharp
- 21. Cómo crear una imagen con esquinas redondeadas en C#?
- 22. Copiar la región de una imagen a otra región en otra imagen
- 23. Copia de una imagen transparente sobre otra imagen transparente
- 24. Reporting Services 2005 - ¿Cómo incrustar una marca de agua?
- 25. Cómo encontrar una imagen dentro de otra imagen usando python
- 26. Crear una ventana en qt con forma de una imagen
- 27. crear una imagen en escala de grises
- 28. Crear una imagen única (GUID a la imagen)
- 29. ¿Cómo puedo filtrar una imagen en Java?
- 30. restar una imagen de otra usando openCV
que iba a recomendar el uso de GDI ventaja así, buen trabajo. –
Buen artículo, muestra cómo agregar texto y filigranas basadas en imágenes. – Liam