Java’da resim formatı değiştirmek, resim boyutlarını öğrenmek gibi temel işlemler kolayca yapılabilir. Yine de bu işlemleri bir genel amaçlı bir “resim işleme sınıfı” toplamak isteyebilirsiniz. Bu sayfada bulacağınız ImageUtil sınıfı böyle bir sınıf için iyi bir başlangıç olabilir. Şu anda sadece resim genişliği, yüksekliği, dosya boyutunu bulabiliyor, jpg, gif, png, bmp formatları arasında çevrim yapabiliyor. İlerleyen zamanlarda resim boyutu değiştirme, üstüne yazı yazma ve resme watermark ekleme gibi işlemleri de ekleyeceğim. ImageUtil‘i direkt olarak kullanmasanız bile kodlarını inceleyerek bu işlemlerin nasıl yapıldığını rahatlıkla öğrenebilirsiniz. Sonuçta bütün bu işlemler için Java ile gelen javax.imageio.ImageIO sınıfını kullanılmakta.
ImageUtil metotları resim dosyasını ‘dosya adı’ olarak değil de File sınıfı olarak almakta. Elinizde sadece dosya adı varsa File nesnesini aşağıdaki gibi oluşturabilirsiniz.
File dosya=new File("c:/dizinadi/resim.jpg");
Metotları burada tek tek açıklamayacağım, bütün açıklamalar JavaDoc formatında kodun içerisinde bulunmakta. Aşağıdaki örneğe bakarak da sınıfın nasıl kullanıldığını görebilirsiniz.
Örnekler:
Not: Bu örnek ImageUtil sınıfının main metodu içerisinde aynen bulunmakta.
try{ //test String filePath="d:/_dev/temp/"; //!!!bunu ve dosya adini degistirmeyi unutmayin!!! File f = new File(filePath+"test.png"); System.out.println("test.png: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertTo(f, new File(filePath+"/test.gif"), ImageUtil.GIF); System.out.println("test.gif: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertTo(f, new File(filePath+"/test.bmp"), ImageUtil.BMP); System.out.println("test.bmp: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertToJpg(f, new File(filePath+"/test.jpg"), 0.9f); System.out.println("test.jpg: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); } catch(Exception e){ e.printStackTrace(); }
Kod:
ImageUtil sınıfını buraya tıklayarak indirebilirsiniz.
package net.gudubeth.common; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.ImageFormatException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageDecoder; import com.sun.image.codec.jpeg.JPEGImageEncoder; import java.io.FileOutputStream; /** * Resim / imaj / gorsel isleme sinifi. Bu sinif ile resimlerin genisliklerini, * yuksekliklerini ve dosya boyutlarini bulabilir ve bu resimleri farkli formatlarda * resimlere donusturebilirsiniz. denenmis formatlar jpg, png, bmp ve gif formatlaridir. * metotlarda parametre olarak dosya adi yerine File nesnesi kullailmistir. Dosya adindan * File nesnesini su sekilde olusturabilirsiniz: * File file=new File("c:/dizinadi/resim.jpg"); * * * @author gudubeth * @since 20-01-2010 */ public class ImageUtil{ public static final String JPG="jpg"; public static final String GIF="gif"; public static final String BMP="bmp"; public static final String PNG="png"; /** * dosyadan BufferedImage nesnesi yaratir. bu dosya diger resim islemlerinde kullanilir * @param imageFile * @return image * @throws ImageFormatException * @throws IOException */ public static BufferedImage findBufferedImage(File imageFile) throws ImageFormatException, IOException{ return ImageIO.read(imageFile); } /** * jpg dosyasindan BufferedImage nesnesi yaratir. bu dosya diger resim islemlerinde kullanilir * @param imageFile * @return image * @throws ImageFormatException * @throws IOException */ public static BufferedImage findBufferedImageForJpeg(File imageFile) throws ImageFormatException, IOException{ JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(new FileInputStream(imageFile.getPath())); return jpegDecoder.decodeAsBufferedImage(); } /** * resmin gensilgini bulur. * @param imageFile gecerli formatlar: jpg,tif,png,bmp,gif. diger formatlari deneyiniz * @return * @throws ImageFormatException * @throws IOException */ public static int findWidth(File imageFile) throws ImageFormatException, IOException { return findBufferedImage(imageFile).getWidth(); } /** * resim yuksekligini bulur * @param imageFile. gecerli formatlar: jpg,tif,png,bmp,gif. diger formatlari deneyiniz * @return image height in int * @throws ImageFormatException * @throws IOException */ public static int findHeight(File imageFile) throws ImageFormatException, IOException{ return findBufferedImage(imageFile).getHeight(); } /** * resim genislik ve yuksekligini bulur. findHeight ve findWidth metotlarini * ayri ayri cagirmaktan daha hizlidir. * @param imageFile * @return int array containing width and height * @throws ImageFormatException * @throws IOException */ public static int[] findWidthAndHeight(File imageFile) throws ImageFormatException, IOException{ BufferedImage buffy = findBufferedImage(imageFile); return new int[]{buffy.getWidth(), buffy.getHeight()}; } /** * dosya boyutunu bulur * @param imageFile * @return * @throws IOException */ public static long findFileSize(File imageFile) throws IOException{ return imageFile.length(); } /** * resmi baska bir resim formatina cevirir. gecerli formatlar jpg, png, gif, bmp * * @param input File cevrilecek dosya. ImageIO tarafinda okunabilen tum formatlar * gecerlidir. bu formatlar arasinda jpg, png, gif, bmp bulunmaktadir * @param output File cikti dosyasi * @param format String jpg, png, gif veya bmp * @return output file cikti dosyasi * @throws IOException */ public static File convertTo(File input, File output, String format) throws IOException{ ImageIO.write(ImageIO.read(input), format, output); return output; } /** * resmi gif'e cevirir * @param input cevrilecek dosya * @param output olusturulacak dosya * @return output file * @throws IOException */ public static File convertToGif(File input, File output) throws IOException{ return convertTo(input, output, GIF); } /** * resim dosyasini bmp'ye cevirir * @param input cevrilecek dosya * @param output olusturulacak dosya * @return output file * @throws IOException */ public static File convertToBmp(File input, File output) throws IOException{ return convertTo(input, output, BMP); } /** * resmi png'ye cevirir * @param input cevrilecek dosya * @param output olusturulacak dosya * @return output file * @throws IOException */ public static File convertToPng(File input, File output) throws IOException{ return convertTo(input, output, PNG); } /** * resmi belirtilen kalitede jpeg formatina cevirir. * @param input cevrilecek dosya * @param output olusturulacak dosya * @param quality jpeg kalitesi. 0 ve 1 arasinda bir deger olabilir. * @return output file * @throws ImageFormatException, IOException */ public static File convertToJpg(File input, File output, float quality) throws ImageFormatException, IOException { if(quality>1 || quality<=0) throw new IllegalArgumentException("quality must be between 0 and 1"); BufferedImage bim = findBufferedImage(input); FileOutputStream fos = new FileOutputStream(output); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); JPEGEncodeParam encodeParams = encoder.getDefaultJPEGEncodeParam(bim); encodeParams.setQuality(quality, false); encoder.setJPEGEncodeParam(encodeParams); encoder.encode(bim); fos.close(); return output; } /** * */ public static void main(String[] args) { try{ //test String filePath="d:/_dev/temp/"; //!!!bunu ve dosya adini degistirmeyi unutmayin!!! File f = new File(filePath+"test.png"); System.out.println("test.png: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertTo(f, new File(filePath+"/test.gif"), ImageUtil.GIF); System.out.println("test.gif: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertTo(f, new File(filePath+"/test.bmp"), ImageUtil.BMP); System.out.println("test.bmp: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); f=ImageUtil.convertToJpg(f, new File(filePath+"/test.jpg"), 0.9f); System.out.println("test.jpg: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f)); } catch(Exception e){ e.printStackTrace(); } } }

Yorumlar