Artikel ini adalah kelas pemrosesan gambar Java yang dienkapsulasi oleh penulis dalam kombinasi dengan beberapa informasi di internet, mendukung penskalaan, rotasi, dan mosaikisasi gambar.
Tanpa basa -basi lagi, kode:
kesepakatan paket; impor java.awt.color; impor java.awt.graphics; impor java.awt.graphics2d; impor java.awt.image; impor java.awt.geom.affinetransform; impor java.awt.image.affinetransform; impor java.awt.awt.awt.awt.awmage; macage.affinetransform; impor java.awt. javax.imageio.imageio;/*** kelas pemrosesan gambar. * * @author nagsh * */kelas publik Imagedeal {string openUrl; // Gambar asli Open Path String SaveUrl; // gambar baru menyimpan path string savename; // gambar string nama gambar baru; // Jenis gambar baru hanya mendukung GIF, JPG, PNG Public Imagedeal (String OpenUrl, String SaveUrl, String Savename, String Suffix) {this.openUrl = OpenUrl; this.savename = savename; this.SaveUrl = saveUrl; this.suffix = sufiks; } /*** Penskalaan gambar. * * @param width * width yang diperlukan * @param tinggi * Tinggi yang diperlukan * @throws Exception */ public void zoom (lebar int, tinggi int) melempar pengecualian {double sx = 0,0; SY ganda = 0,0; File file = file baru (OpenUrl); if (! file.isfile ()) {lempar pengecualian baru ("Imagedeal >>>" + file + "Bukan file gambar!"); } BufferedImage Bi = ImageIo.read (file); // Baca gambar // Hitung rasio penskalaan Sumbu-y-sumbu-jika-tidak jika penskalaan skala sama, pastikan bahwa lebar dan tinggi parameter adalah perubahan skala yang sama sebelum memanggil = (ganda) lebar/ bi.getWidth (); sy = (ganda) tinggi / bi.getHeight (); Affinetransformop op = affinetransformop baru (affinetransform.getscaleInstance (sx, sy), null); File sf = file baru (saveUrl, savename + "." + Suffix); Gambar zoomimage = op.filter (bi, null); Coba {ImageIO.Write ((BufferedImage) Zoomimage, Suffix, SF); // simpan gambar} catch (pengecualian e) {e.printstacktrace (); }} / ** * Rotate * * @param derajat * Rotate Angle * @throws Exception * / public void spin (INT Degeler) melempar Exception {int Swidth = 0; // Lebar setelah rotasi int sheight = 0; // tinggi setelah rotasi int x; // Asal koordinat horizontal int y; // asal file koordinat vertikal = file baru (openUrl); if (! file.isfile ()) {lempar pengecualian baru ("Imagedeal >>>" + file + "Bukan file gambar!"); } BufferedImage Bi = ImageIo.read (file); // Baca gambar // Proses sudut rotasi-determine derajat = derajat % 360; if (degree < 0) degree = 360 + degree;// Convert the angle to between 0-360 degrees double theta = Math.toRadians(degree);// Convert the angle to radians// Determine the width and height after rotation if (degree == 180 || degree == 0 || degree == 360) { swidth = bi.getWidth(); sheight = bi.getheight (); } lain jika (derajat == 90 || derajat == 270) {sheight = bi.getWidth (); swidth = bi.getheight (); } else {swidth = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getHeight () * bi.getHeight ())); sheight = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getHeight ())); } x = (swidth / 2) - (bi.getWidth () / 2); // Tentukan koordinat asal y = (sheight / 2) - (bi.getHeight () / 2); BufferedImage SpinImage = BufferedImage baru (Swidth, Sheight, Bi.GetType ()); // Atur warna latar belakang gambar grafik2d gs = (grafik2d) spinimage.getGraphics (); gs.setColor (color.white); gs.fillrect (0, 0, swidth, sheight); // Gambarlah latar belakang gambar yang diputar dalam afinetransform warna yang diberikan pada = affinetransform baru (); at.rotate (theta, swidth / 2, sheight / 2); // putar gambar at.translate (x, y); Affinetransformop op = affinetransformop baru (at, affinetransformop.type_bicubic); spinimage = op.filter (bi, spinimage); File sf = file baru (saveUrl, savename + "." + Suffix); Imageio.write (spinimage, sufiks, sf); // Simpan gambar} /*** Mosaicization. * Ukuran mosaik ukuran @param, yaitu panjang dan lebar setiap persegi panjang * @return * @throws Exception */ mosaic boolean publik (ukuran int) melempar pengecualian {file file = file baru (openUrl); if (! file.isfile ()) {lempar pengecualian baru ("Imagedeal >>>" + file + "Bukan file gambar!"); } BufferedImage Bi = ImageIo.read (file); // Baca gambar bufferedImage spinImage = baru bufferedImage (bi.getWidth (), bi.getHeight (), bi.type_int_rgb); if (bi.getWidth () <size || bi.getHeight () <size || size <= 0) {// Ukuran kisi mosaik terlalu besar atau terlalu kecil pengembalian salah; } int xcount = 0; // Jumlah arah ditarik int ycount = 0; // Jumlah arah ditarik dalam ycount if (bi.getWidth () % size == 0) {xcount = bi.getWidth () / size; } else {xcount = bi.getWidth () / size + 1; } if (bi.getHeight () % size == 0) {ycount = bi.getHeight () / size; } else {ycount = bi.getHeight () / size + 1; } int x = 0; // Koordinat int y = 0; // Gambar mosaik (gambar persegi panjang dan isi warna) grafik gs = spinimage.getGraphics (); untuk (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// mosaic persegi panjang ukuran int mwidth = ukuran; int mheight = ukuran; if (i == xcount-1) {// yang terakhir dalam arah horizontal adalah khusus, dan mungkin tidak cukup untuk satu ukuran mwidth = bi.getWidth ()-x; } if (j == ycount-1) {// Demikian pula mHeight = bi.getHeight ()-y; } // Nilai RGB dari warna persegi panjang mengambil center pixel int centerx = x; int centery = y; if (mwidth % 2 == 0) {centerx += mwidth / 2; } else {centerx += (mwidth - 1) / 2; } if (mheight % 2 == 0) {centery += mheight / 2; } else {centery += (mHeight - 1) / 2; } Warna warna = warna baru (bi.getrgb (centerx, centery)); gs.setColor (warna); gs.fillrect (x, y, mwidth, mheight); y = y + ukuran; // Hitung koordinat y dari persegi panjang berikutnya} y = 0; // Kembalikan koordinat y x = x + ukuran; // Hitung koordinat x} gs.dispose (); File sf = file baru (saveUrl, savename + "." + Suffix); Imageio.write (spinimage, sufiks, sf); // Simpan gambar kembali true; } public static void main (string [] args) melempar Exception {Imagedeal Imagedeal = New Imagedeal ("e: //1.jpg", "e: //", "2", "jpg"); // uji penskalaan/* Imagedeal.zoom (200, 300); */ // Tes Rotasi/* Imagedeal.spin (90); */ // uji mosaic/*imagedeal.mosaic (4);*/}} Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.