Image Processing,  Java,  Programming,  Tekno

Mengubah Ukuran JPEG dengan Java

Resize

Pernah dapat kasus harus mengubah ukuran image dengan menggunakan bahasa Java?

Nah, berikut ini adalah source code untuk mengubah (mengecilkan) ukuran file JPEG dengan Java. Dapat dari teman. Teman juga dapat dari internet.^^

[sourcecode language=’java’]
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class TestResize {
public byte[] scaleImage(InputStream p_image, int p_width, int p_height) throws Exception {

InputStream imageStream = new BufferedInputStream(p_image);
Image image = (Image) ImageIO.read(imageStream);

int thumbWidth = p_width;
int thumbHeight = p_height;

// Rasio ini perlu diperhatikan agar image sesuai dengan yang diinginkan.
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);
}
// Menggambar image yang telah diubah ukurannya.
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);

// Menulis image ke outputstream.
ByteArrayOutputStream out = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = 100; // Antara 1-100, 100 adalah nilai kualitas yang tertinggi.
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
ImageIO.write(thumbImage, “.jpg”, out);

// Baca outputstream ke inputstream untuk mengembalikan suatu nilai.
ByteArrayInputStream bis = new ByteArrayInputStream(out.toByteArray());
imageStream.close();
return out.toByteArray();
}
[/sourcecode]

Waktu di-tes untuk mengecilkan image, source code diatas sukses! Tapi jika kemudian saya mengubah sehingga kondisinya : ukuran image lebih kecil dari rasio yang diinginkan, code diatas juga sukses untuk memperbesar image! Bagus, sih. Tapi masalahnya saya sedang butuh code yang otomatis mengecilkan image HANYA KETIKA ukuran image itu memang dibawah standar yang saya inginkan. Bisa. Dengan menggunakan method main berikut :

[sourcecode language=’java’]
public static void main(String[] args) {
TestResize t = new TestResize();
FileInputStream f;
InputStream inputStream = null;
int newMaxLength = 400;
try {
f = new FileInputStream(“E:\\file_input.jpg”);
InputStream imageStream = new BufferedInputStream(f);
Image image = (Image) ImageIO.read(imageStream);
imageStream.close();
//pengecekan apakah ukuran image input lebih besar dari ukuran image yang diharapkan?
if ((image.getHeight(null) > newMaxLength) || (image.getWidth(null) > newMaxLength)) {
f = new FileInputStream(“E:\\file_input.jpg”);
FileOutputStream fo = new FileOutputStream(“E:\\file_output.jpg”);
fo.write(t.scaleImage(f, newMaxLength, newMaxLength));
fo.flush();
fo.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
[/sourcecode]

Semoga bermanfaat!

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *