Estou desenvolvendo um programinha simples, que deve escrever texto em cima das imagens. Estou usando GradientPaint para isso, so que esta classe server para fazer degrade e meu texto acaba ficando borrado.
Só mais um detalhe. Seu gradient está começando e terminando no mesmo lugar. Você deve usar o FontMetrics para calcular a largura/altura do seu texto e ajustar a posição do ponto 2.
G
gianrubio
Nao deu certo!
O que eu queria era q nao tivesse esse degrade, queria escrever direto na imagem. So que a unica forma que achei foi usando esse gradiente.
V
ViniGodoy
Ah tá!!! Então o gradiente não é necessário mesmo!!
Use o método drawString!
T
thingol
Dica: a classe java.awt.Color implementa a interface java.awt.Paint, portanto pode ser passada como parâmetro para setPaint. Exemplo:
g.setPaint(Color.BLACK);
G
gianrubio
Agora sim ficou blz.Nao sei como nao lembrei desse metodo…hehe
So uma coisa, a imagem ta ficando manchada aonde ele escreve o texto.
Acho q eh por causa da resolucao ou algo assim. Alguma dica?
O mesmo acontece qdo coloco uma linha em cima da imagem.
Fica manchado
T
thingol
Se você usar compressão JPEG isso fatalmente irá ocorrer.
É um “artefato” da compressão.
Se você salvar a imagem como PNG, por exemplo (que faz compressão mas sem perdas, ou seja, não modifica a imagem original) essas “manchas” não irão aparecer.
G
gianrubio
pois eh acabei de descobrir isso…nao tem como eu setar o valor da compreensao na hora de gerar a a imagem?
T
thingol
Deve haver um JPEGEncodingParameters ou coisa parecida que você deve passar para algum método dessa classe javax.image.ImageIO, para alterar a qualidade da compressão.
publicstaticvoidgravaTexto(Stringarquivo,intfator,Stringtexto)throwsException{floatfactor=0f;try{// this code ensures that all the pixels in the image are loadedImagetemp=newImageIcon(arquivo).getImage();// create the buffered imageBufferedImagebufferedImage=newBufferedImage(temp.getWidth(null),temp.getHeight(null),BufferedImage.TYPE_INT_RGB);// copy image to buffered imageGraphicsg=bufferedImage.createGraphics();// clear background and paint the imageg.setColor(Color.white);g.fillRect(0,0,temp.getWidth(null),temp.getHeight(null));g.drawImage(temp,0,0,null);g.setColor(Color.BLACK);g.setFont(newFont("Arial Regular",Font.PLAIN,8));g.drawString("Bla bla bla.",bufferedImage.getWidth()-125,bufferedImage.getHeight()-70+fator);g.dispose();// sharpen/soften (depending on factor (-ve for sharpening, +ve for softening)float[]array={0,factor,0,factor,1-(factor*4),factor,0,factor,0};Kernelkernel=newKernel(3,3,array);ConvolveOpcOp=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);bufferedImage=cOp.filter(bufferedImage,null);// write the jpeg to a fileOutputStreamout=newFileOutputStream(arquivo);// encodes image as a JPEG data streamJPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);com.sun.image.codec.jpeg.JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bufferedImage);param.setQuality(1f,true);encoder.setJPEGEncodeParam(param);encoder.encode(bufferedImage);}catch(Exceptione){throwe;}}