Moin,
ich habe eine Methode geschrieben mit denen grössere Bilder auf eine maximale Grösse von 640x480 verkleinert werden.
Klappt auch alles soweit, allerdings malt die Methode die Bilder quasi neu und legt eine physikalische Temp Datei (tmp.jpg) ins root Verzeichnis, was ich verhindern will.
Frage: Ist es möglich die physikalische Datei bzw das tmp.jpg im Cache zu verarbeiten ohne das er eine TEMP Datei auf den Datenträger schreibt?
Sprich das Shrinken und neu malen findet einzig und allein im Arbeitsspeicher statt.
Jemand rat?
ich habe eine Methode geschrieben mit denen grössere Bilder auf eine maximale Grösse von 640x480 verkleinert werden.
Klappt auch alles soweit, allerdings malt die Methode die Bilder quasi neu und legt eine physikalische Temp Datei (tmp.jpg) ins root Verzeichnis, was ich verhindern will.
Frage: Ist es möglich die physikalische Datei bzw das tmp.jpg im Cache zu verarbeiten ohne das er eine TEMP Datei auf den Datenträger schreibt?
Sprich das Shrinken und neu malen findet einzig und allein im Arbeitsspeicher statt.
Jemand rat?
Code:
tmppath = Utils.rootDir() + "tmp.jpg";
file = new File(tmppath);
Code:
public static File shrinkImage(File inputfile, String tmppath)
{
Image img = null;
File f = new File(tmppath);
try
{
FileOutputStream fos = new FileOutputStream(f);
img = new ImageIcon(ImageIO.read(inputfile)).getImage();
int wOld = img.getWidth(null), hOld = img.getHeight(null);
Image scaledImage = null;
if(img.getWidth(null)>wNew || img.getHeight(null)>hNew)
{
scaledImage = img.getScaledInstance(wNew, hNew, Image.SCALE_SMOOTH);
BufferedImage outImg = new BufferedImage(wNew, hNew, BufferedImage.TYPE_INT_RGB);
Graphics g = outImg.getGraphics();
g.drawImage(scaledImage, 0, 0, null);
g.dispose();
ImageIO.write(outImg, "jpg", fos);
outImg.flush();
fos.flush();
fos.close();
return f;
}
else
{
fos.flush();
fos.close();
scaledImage = img.getScaledInstance(wOld, hOld, Image.SCALE_SMOOTH);
return inputfile;
}
}
catch (IOException e)
{
e.printStackTrace();
return inputfile;
}
}