Mari kita lihat efeknya terlebih dahulu:
Tes satu:
Gambar asli:
Render:
Tes 2:
Gambar asli:
Render:
Bagian kode:
Copy kode kodenya sebagai berikut:
/**
*
*/
paket com.b510;
import java.awt.Rectangle;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor java.io.FileInputStream;
impor java.io.IOException;
import java.util.Date;
impor java.util.Iterator;
impor javax.imageio.ImageIO;
impor javax.imageio.ImageReadParam;
impor javax.imageio.ImageReader;
impor javax.imageio.stream.ImageInputStream;
/**
* @tanggal 26-11-2012
* @penulis xhw
*
*/
kelas publik ImageCut {
/**
* Nama jalur gambar sumber seperti: c:/1.jpg
*/
pribadi String srcpath = "e:/poool.jpg";
/**
* Potong nama jalur penyimpanan gambar. Misalnya: c:/2.jpg
*/
subjalur String pribadi = "e:/pool_end";
/**
*format gambar jpg
*/
String akhir statis pribadi IMAGE_FORM_OF_JPG = "jpg";
/**
*format gambar png
*/
String akhir statis pribadi IMAGE_FORM_OF_PNG = "png";
/**
* x koordinat titik geser
*/
int pribadi x;
/**
* Koordinat Y titik potong
*/
swasta int y;
/**
* Lebar titik potong
*/
lebar int pribadi;
/**
* Ketinggian titik potong
*/
tinggi int pribadi;
Pemotongan Gambar publik() {
}
public ImageCut(int x, int y, int lebar, int tinggi) {
ini.x = x;
ini.y = y;
ini.lebar = lebar;
this.tinggi = tinggi;
}
public static void main(String[] args) melempar Pengecualian {
ImageCut imageCut = ImageCut baru(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* Mengembalikan Iterator yang berisi semua ImageReader yang terdaftar saat ini yang mengklaim dapat memecahkan kode format yang ditentukan.
* Parameter: formatName - Berisi nama format informal (seperti "jpeg" atau "tiff"), dll.
*
* @param postFix
* Ekstensi file
* @kembali
*/
Iterator publik<ImageReader> getImageReadersByFormatName(String postFix) {
beralih (pascaPerbaikan) {
kasus IMAGE_FORM_OF_JPG:
kembalikan ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
kasus IMAGE_FORM_OF_PNG:
kembalikan ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG);
bawaan:
kembalikan ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
}
}
/**
* Pangkas gambar dan simpan gambar baru yang telah dipotong.
* @param srcpath jalur gambar sumber
* @param subjalur Potong jalur penyimpanan gambar
* @throwsIOException
*/
public void cut(String srcpath, String subpath) melempar IOException {
FileInputStream adalah = null;
ImageInputStream iis = nol;
mencoba {
//Baca file gambar
adalah = FileInputStream baru(srcpath);
// Dapatkan nama akhiran file
String postFix = getPostfix(srcpath);
System.out.println("Format gambarnya adalah: " + postFix);
/*
* Mengembalikan Iterator yang berisi semua ImageReader yang terdaftar saat ini yang mengklaim dapat memecahkan kode format yang ditentukan.
* Parameter: formatName - Berisi nama format informal (seperti "jpeg" atau "tiff"), dll.
*/
Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
Pembaca ImageReader = it.next();
// Dapatkan aliran gambar
iis = ImageIO.createImageInputStream(adalah);
/*
* <p>iis:Baca source.true: Hanya penelusuran maju</p>. Tandai sebagai 'Hanya penelusuran maju'.
* Pengaturan ini berarti bahwa gambar yang terdapat dalam sumber masukan hanya akan dibaca secara berurutan, sehingga memungkinkan pembaca menghindari cache bagian masukan yang berisi data terkait dengan gambar yang telah dibaca sebelumnya.
*/
pembaca.setInput(iis, benar);
/*
* <p>Kelas yang menjelaskan cara mendekode aliran<p>. Digunakan untuk menentukan cara mendekode aliran dari Java Image I/O pada input
* Aliran mengubah gambar atau kumpulan gambar dalam konteks bingkai. Plugin untuk format gambar tertentu akan diimplementasikan dari ImageReadernya
* Metode getDefaultReadParam mengembalikan instance ImageReadParam.
*/
Param ImageReadParam = pembaca.getDefaultReadParam();
/*
* Area pemotongan gambar. Rectangle menentukan area dalam ruang koordinat, melalui objek Rectangle
* Koordinat (x, y), lebar dan tinggi titik sudut kiri atas dapat menentukan luas ini.
*/
Persegi panjang persegi = persegi panjang baru(x, y, lebar, tinggi);
// Menyediakan BufferedImage untuk digunakan sebagai target decoding data piksel.
param.setSourceRegion(persegi);
/*
* Gunakan ImageReadParam yang disediakan untuk membaca objek yang ditentukan oleh indeks imageIndex dan memperlakukannya sebagai selesai
* BufferedImage kembali.
*/
BufferedImage bi = reader.read(0, param);
//Simpan gambar baru
ImageIO.write(bi, postFix, File baru(subjalur + "_" + Tanggal baru().getTime() + "." + postFix));
} Akhirnya {
jika (adalah != nol)
adalah.close();
jika (iis != nol)
iis.dekat();
}
}
/**
* Dapatkan nama akhiran inputFilePath, contoh: nama akhiran "e:/test.pptx" adalah: "pptx"<br>
*
* @param inputFilePath
* @kembali
*/
String publik getPostfix(String inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
publik int getHeight() {
tinggi kembali;
}
public void setHeight(int tinggi) {
this.tinggi = tinggi;
}
String publik getSrcpath() {
kembalikan srcpath;
}
kekosongan publik setSrcpath(String srcpath) {
ini.srcpath = srcpath;
}
String publik getSubpath() {
kembali subjalur;
}
public void setSubpath(String subjalur) {
this.subjalur = subjalur;
}
publik int getWidth() {
lebar kembali;
}
public void setWidth(int lebar) {
ini.lebar = lebar;
}
publik int getX() {
kembalikan x;
}
kekosongan publik setX(int x) {
ini.x = x;
}
publik int getY() {
kembali kamu;
}
kekosongan publik setY(int y) {
ini.y = y;
}
}