Marca d'água ou watermark em imagens dinamicamente
30/01/2014 07:49
0
Bom dia galera.

Gente eu estou precisando colocar uma marca d'água nas imagens do meu sistema, mas não pode ser por css pelo fato de não conseguir segurança. Se a pessoal conseguir salvar a imagem a marca d'água tem que ir junto.

No meu sistema eu gero um token pra cada usuário e esse token tem que ficar como marca d'água na imagem para identificar qual foi o usuário que salvou a imagem do sistema.

Alguém faz ideia de como fazer isso?

Obrigado a todos desde já.
Tags: watermark, marca d'água, d'agua, imagem, html


1
Ai amigão, espero que te ajude.

Na controller:


package grails.watermark

import javax.imageio.ImageIO
import javax.swing.ImageIcon
import java.awt.AlphaComposite
import java.awt.Color
import java.awt.Font
import java.awt.FontMetrics
import java.awt.Graphics2D
import java.awt.RenderingHints
import java.awt.geom.Rectangle2D
import java.awt.image.BufferedImage

class HomeController {

def index() {
}

def applyWatermarkToImage(String text, String filePath) {

try {

File file = new File(filePath);
if (!file.exists()) {
println "File not Found";
}

ImageIcon icon = new ImageIcon(file.getPath());
BufferedImage bufferedImage = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
g2d.drawImage(icon.getImage(), 0, 0, null);

AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2d.setComposite(alpha);
g2d.setColor(Color.white);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setFont(new Font("Arial", Font.BOLD, 30));

FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle2D rect = fontMetrics.getStringBounds(text, g2d);
g2d.drawString(text, (icon.getIconWidth() - (int) rect.getWidth()) / 2, (icon.getIconHeight() - (int) rect.getHeight()) / 2);
g2d.dispose();

File fileout = new File("watermarkedImage.jpg");
ImageIO.write(bufferedImage, "jpg", fileout);
return fileout

} catch (IOException ioe) {
ioe.printStackTrace()
}
}

def image() {
File file = applyWatermarkToImage("Example!!!!", request.getSession().getServletContext().getRealPath("uk-flag.jpg"))
// "uk-flag.jpg" está em <<projeto>>/web-app, poderia estar em qualuer lugar
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.name}")
response.outputStream << file.bytes
return
}
}




30/01/2014 17:22


1
Esqueci de dar a fonte:

http://www.redrails.com.br/2012/05/26/inserindo-marca-dagua-usndo-java/
30/01/2014 17:23


0
Vlw Adrian, consegui fazer aqui, este método funciona perfeitamente. So tive que fazer alguns reajustes para trazer a imagem do banco e criar a marca como eu gostaria.

def getImgCreateWater(){

def ImagemInstance = Imagem.get('1')

def texto = "TEXTO"
def fonte = new Font("Arial", Font.BOLD, 30)

def color = new Color(255, 255, 255, 0x60);


if(ImagemInstance) {

byte[] img = ImagemInstance.img

BufferedImage bi = ImageIO.read(new ByteArrayInputStream(img))

def width = bi.getWidth(null);
def height = bi.getHeight(null);

BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB)
Graphics g = destImage.getGraphics()


def data = new Date().format("dd/MM/yy").split('/')
def dia = new Integer(data[0])
def mes = new Integer (data[1])
def ano = new Integer(data[2])

def array = new ArrayList()
array << dia << mes << ano

g.drawImage(bi, 0, 0, width, height, null);
g.setFont(fonte)
g.setColor(color)

def vertical = (height / 6)
def verticalAtual = 0

for(int x = 0; x < 5; x++){
if((x % 2) == 0){ //verifica se e par
g.drawString(texto, (width / 6) , verticalAtual + vertical)
}else{
g.drawString(texto, (width / 4) , verticalAtual + vertical)
}
verticalAtual = verticalAtual + vertical
}
g.dispose()

OutputStream out = response.getOutputStream();
ImageIO.write(destImage, "PNG", out);
out.close();

} else {
response.sendError(404)
}
}
03/02/2014 07:30



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto