flou
Mitglied
Hallo,
ich habe ein Bilder-Ftp-Upload Programm geschrieben. Dabei werden aus einem grossen Bild 2 Thumbnails erstellt. Mein Problem ist, dass es häufig vorkommt, dass die Thumbnails dann schwarz sind wenn sie hochgeladen sind. Man muss dazusagen, dass die Bilder ziemlich hohe Auflösungen haben, also mindestens 2-3MB gross sind! Das Wasserzeichen, das ich darüberlege wird jedoch einwandfrei dargestellt. Nur hald auf schwarzem Hintergrund.
Vielleicht weiss jemand woran dies liegen könnte!
Hier (noch nicht ausgereifte) meine Methode:
ich habe ein Bilder-Ftp-Upload Programm geschrieben. Dabei werden aus einem grossen Bild 2 Thumbnails erstellt. Mein Problem ist, dass es häufig vorkommt, dass die Thumbnails dann schwarz sind wenn sie hochgeladen sind. Man muss dazusagen, dass die Bilder ziemlich hohe Auflösungen haben, also mindestens 2-3MB gross sind! Das Wasserzeichen, das ich darüberlege wird jedoch einwandfrei dargestellt. Nur hald auf schwarzem Hintergrund.
Vielleicht weiss jemand woran dies liegen könnte!
Hier (noch nicht ausgereifte) meine Methode:
PHP:
public BWImage createThumbnail(char pType) throws Exception, InterruptedException{
// load image from INFILE
Image image = Toolkit.getDefaultToolkit().getImage(getLocalURL());
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
int thumbWidth = image.getWidth(null);
int thumbHeight = image.getHeight(null);
if(pType == 'm'){
thumbWidth = MINI_WIDTH;
thumbHeight = MINI_HEIGHT;
} else {
thumbWidth = THUMB_WIDTH;
thumbHeight = THUMB_HEIGHT;
}
double thumbRatio = (double) thumbWidth / (double) thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int) (thumbWidth / imageRatio);
} else {
thumbWidth = (int) (thumbHeight * imageRatio);
}
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
File tmpfile = File.createTempFile("bwup",null);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tmpfile));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = 100;
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
// WATERMARKING
BufferedImage original = ImageIO.read(tmpfile);
BufferedImage watermark = ImageIO.read(new URL("http://blablablabla.de/data/img/watermark.png"));
BufferedImage result = new BufferedImage(original.getWidth(),
original.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = result.createGraphics();
g.drawImage(original, 0, 0, null);
//g.drawImage(watermark, 0, 0, null);
int rpWidth = (int) Math.round(thumbWidth * 0.5);
int rpHeight = (int) Math.round(thumbHeight * 0.5);
BufferedImage resizedWm = resizeWatermark(watermark, rpWidth, rpHeight);
g.drawImage(resizedWm,0,0,resizedWm.getWidth(),resizedWm.getHeight(),null);
out = new BufferedOutputStream(new FileOutputStream(tmpfile));
encoder = JPEGCodec.createJPEGEncoder(out);
param = encoder.getDefaultJPEGEncodeParam(result);
quality = 95;
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(result);
out.close();
BWImage bwtmp = new BWImage(tmpfile.getAbsolutePath());
return bwtmp;
}
Zuletzt bearbeitet: