Skrive en streng på et bufferedimage.
Jeg har brug for at skrive en streng på et jpg billede og resize det til et thumbnail.Kort fortalt loader jeg først det originale billede til et buffered image,
laver et nyt buffered image med de ønskede dimmensioner og skriver det originale billede til det.
det virker fint. problemet i at jeg har brug for at skrive tekst på det originale bufferedimage så teksten bliver resizet med. Koden kører flere gange da der skal laves flere forskellige thumbnails af det samme billede, og teksten skulle helst se ens ud på dem alle.
min kode ser således ud:
package applicationServer;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
public class ImageMaker {
File originalFile=null;
BufferedImage originalBufferedImage=null;
BufferedImage newBufferedImage=null;
int newXSize;
int newYSize;
int newColorDepth;
String clientName="SampleClient";
String text="";
public ImageMaker() {
}
public void setClientName(String clientName){
this.clientName=clientName;
}
public void makeImage(String text, int maxWidth, int maxHeight, int maxColorDepth){
this.text=text;
newXSize=maxWidth;
newYSize=maxHeight;
newColorDepth=maxColorDepth;
loadOriginalImage();
writeTextOnOriginalImage();
adjustNewImageSize();
makeScaleImage();
saveNewImage();
}
public void loadOriginalImage()
{
try
{
originalFile = new File("U:\blabla");
originalBufferedImage=ImageIO.read(originalFile);
}
catch (IOException iEx)
{
iEx.printStackTrace();
}
}
private void writeTextOnOriginalImage(){
Graphics2D g = originalBufferedImage.createGraphics();
g.setFont(new Font("Dialog",Font.PLAIN,20));
g.drawImage(originalBufferedImage,0,0,originalBufferedImage.getWidth(),originalBufferedImage.getHeight(),null);
g.drawString("lala",10,30);
}
private void makeScaleImage()
{
newBufferedImage = new BufferedImage(newXSize, newYSize, originalBufferedImage.getType());
Graphics2D graphics2D = newBufferedImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(originalBufferedImage,0,0,newXSize,newYSize,null);
}
private void adjustNewImageSize(){
double newImageRatio = (double)newXSize/(double)newYSize;
double originalImageRatio = (double)originalBufferedImage.getWidth()/(double)originalBufferedImage.getHeight();
if(newImageRatio < originalImageRatio){
newYSize= (int)(newXSize/originalImageRatio);
}
else{
newXSize= (int)(newYSize * originalImageRatio);
}
}
private void saveNewImage(){
try {
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(clientName+".jpg"));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bufferedOutputStream);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(newBufferedImage);
encoder.setJPEGEncodeParam(param);
encoder.encode(newBufferedImage);
bufferedOutputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Jeg er ikke en hej til grafik, men jeg kan ikke forstå det her ikke virker. med de same kode som i writeTextOnOriginalImage();
kan jeg fint skrive på det resizede billede.
Ved nogen hvordan jeg kan få det til at virke?