Home › Forum › Nuclos Entwicklung › Makros und Regeln › Bilder verkleinern
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Jahre, 3 Monaten von
Markus Glitzner.
-
AutorBeiträge
-
28 Februar 2012 um 10:19 Uhr #5097
Markus Glitzner
TeilnehmerHallo!
Wie kann ich Bilder verkleinern?
Meine Java Kentnisse sind dafür leider nicht ausreichend. Auch weis ich nicht wie der Datentyp org.nuclos.common.NuclosImage zu handhaben ist.
Ich hätte an so etwas in der Art gedacht, allerdings wird hier das Bild von einer Datei eingelesen:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;import org.nuclos.server.ruleengine.*;
public abstract class Images {
public static Integer ResizeImage(Integer wNew, Integer hNew) throws NuclosBusinessRuleException {
try {
Image img = new ImageIcon(ImageIO.read(new File("c:/Beispiel.jpg"))).getImage();
Integer wOld = img.getWidth(null);
Integer hOld = img.getHeight(null);if ((wOld>wNew && wNew>0) || (hOld>hNew && hNew>0)) {
if (wOld/wNew > hOld/hNew){
wNew = wOld/(wOld/wNew);
hNew = hOld/(wOld/wNew);
}else{
wNew = wOld/(hOld/hNew);
hNew = hOld/(hOld/hNew);
}Image 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, "jpeg", new File("c:/Beispiel_small.jpg"));
}} catch (IOException e) {
throw new NuclosBusinessRuleException(e.toString());
}return 0;
}
}Gruß
Hugo28 Februar 2012 um 13:43 Uhr #5099Thomas Hamm
TeilnehmerHallo Hugo,
hier ein Screenshot der Klasse NuclosImage.
Hat nicht viele Methoden. Ich denke, dass du schon die Java Libs verwenden musst.
Kann es leider gerade nicht testen. Aber hast du schon versucht den Pfad aus dem Feld deiner Entität auszulesen? Wenn du ihn hast, sollte es ja kein Problem mehr sein.Gruß Thomas
Attachments:28 Februar 2012 um 17:17 Uhr #5100Markus Glitzner
TeilnehmerDanke, hat geholfen!
Es funktioniert jetzt auch ohne dem Umweg als Datei:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;//import java.io.File;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;import javax.imageio.ImageIO;
import org.nuclos.common.NuclosImage;
import org.nuclos.server.ruleengine.NuclosBusinessRuleException;public abstract class Images {
public static NuclosImage ResizeImage(NuclosImage nImg, Integer wNew, Integer hNew) throws NuclosBusinessRuleException {
try {
//Image img = new ImageIcon(ImageIO.read(new File("c:/Beispiel.jpg"))).getImage();
BufferedImage img = ImageIO.read(new ByteArrayInputStream(nImg.getContent()));
Integer wOld = img.getWidth(null);
Integer hOld = img.getHeight(null);if ((wOld>wNew && wNew>0) || (hOld>hNew && hNew>0)) {
if (wOld*1.0/wNew*1.0 > hOld*1.0/hNew*1.0){
wNew = (int)(wOld*1.0/(wOld*1.0/wNew*1.0));
hNew = (int)(hOld*1.0/(wOld*1.0/wNew*1.0));
}else{
wNew = (int)(wOld*1.0/(hOld*1.0/hNew*1.0));
hNew = (int)(hOld*1.0/(hOld*1.0/hNew*1.0));
}Image 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, "jpeg", new File("c:/Beispiel_small.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(outImg, "jpeg", baos);return new NuclosImage("Image", baos.toByteArray(), null, true);
} else {
return nImg;
}} catch (IOException e) {
throw new NuclosBusinessRuleException(e.toString());
}
}
}
Gruß
Hugo -
AutorBeiträge