Ich komprimiere ein Bild, das die JPEG-Komprimierung in Java ausführt, und skaliere dann die Größe vor dem Speichern. Ich halte die Speicherhöhe als 480
und Berechnung der height
basierend auf Seitenverhältnis, so dass das ursprüngliche height:width
Verhältnis gleich bleibt.Java: getHeight() on BufferedImage gibt die Bildbreite zurück und getWidth() gibt die Bildhöhe zurück
Dies ist der Code, den ich
bin mitString inputImagePath = "1.JPG";
String outputImagePath = "Test Compression\\" + "1.JPG";
File imageFile = new File(inputImagePath);
File compressedImageFile = new File(outputImagePath);
int height = 640;
System.out.print("Conversion Start!\n");
if (imageFile != null)
{
InputStream is = new FileInputStream(imageFile);
OutputStream os = new FileOutputStream(compressedImageFile);
float quality = 0.2 f;
BufferedImage image = ImageIO.read(is);
double aspectRatio = (double) image.getWidth()/image.getHeight();
width = (int)(height * aspectRatio);
System.out.println("Original height = " + image.getHeight() + " Original width = " + image.getWidth());
System.out.println(" aspect ratio = " + aspectRatio);
System.out.println("height = " + height + " width = " + width + " aspect ratio = " + aspectRatio);
BufferedImage resizedImage = new BufferedImage(width, height, image.getType());
Graphics2D g = resizedImage.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
if (!writers.hasNext())
throw new IllegalStateException("No writers found");
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
writer.write(null, new IIOImage(resizedImage, null, null), param);
}
System.out.print("Conversion compete!");
Hier wird die Bild-Metadaten
Hier ist der gedruckte Inhalt:
Original height = 1920 Original width = 2560
aspect ratio = 1.3333333333333333
height = 480 width = 640
aspect ratio = 1.3333333333333333
ich den Code angewendet andere Bilder die eigentlich width > height
hatten und ich hatte keine Rotationsprobleme. Dieses Rotaion-Problem tritt nur bei Bildern mit height > width
auf. Soweit ich weiß, dass in meinem Code nichts falsch ist, muss ich etwas verpassen, das mit den Funktionen getHeight() und getWidth() verwandt ist. Bitte helfen Sie mir
Könnten Sie Ihr Codebeispiel mit Ihrer Körpergröße, sondern auch variabel aktualisieren? Es scheint zu fehlen. – Flipbed
Ich aktualisiere den Code mit 'height' Variable. Ich habe die gewünschten Ergebnisse mit [Metadaten-Extraktor] (https://github.com/drewnoakes/metadata-extractor) erhalten, wie übrigens von Sergey Grinev vorgeschlagen. Ich habe es unten veröffentlicht. –