Artikel ini menjelaskan metode java untuk menambahkan tanda air gambar, tanda air teks dan mosaik ke gambar. Bagikan untuk referensi Anda, sebagai berikut:
Anda dapat membuat kelas Utils baru di Eclipse, menyalin kode berikut dan menggunakannya secara langsung, dan metode berikut menyadari penambahan tanda air tunggal atau ganda.
Paket com.rzxt.fyx.common.util; impor java.awt.alphacomposite; impor java.awt.color; impor java.awt.font; impor java.awt.graphics2d; impor java.awt.image; impor java.awt.renderinghints; java.io.File;import javax.imageio.ImageIO;import javax.swing.ImageIcon;/** * Add a watermark to the image* @author tgy * */public class MarkImageUtils { /** * @param args */ public static void main(String[] args) { String output = "F:/images/"; Sumber String = "f: /images/6.jpg"; // Sumber gambar jalur string ikon = "f: /images/icon2.png"; // Overcover gambar jalur string imagename = "mark_image"; // nama gambar string imagetype = "jpg"; // Jenis gambar JPG, jpeg, png, gif string text = "watermarked"; ukuran int = 4; // Mosaic Size Integer Degree = NULL; // Sudut rotasi watermark adalah -45, nol berarti tidak memutar hasil string = null; // tambahkan tanda air gambar ke hasil gambar = markimageutils.markimageBymoreicon (ikon, sumber, output, imagename, imagetype, derajat); // hasil = markimageutils.markimageBysingleicon (ikon, sumber, output, imageName, imagetype, derajat); //Add text watermark to the image// result = MarkImageUtils.markImageByMoreText(source,output,imageName,imageType,Color.red,text,degree);// result = MarkImageUtils.markImageBySingleText(source,output,imageName,imageType,Color.red,text,degree);// //Mosaic the image// result = MarkImageutils.markimageByMosaic (Sumber, Output, ImageName, Imagetype, Size); System.out.println (hasil); }/** * Tambahkan beberapa watermark gambar ke lokasi gambar yang berbeda, dan atur sudut rotasi gambar tanda air * @param ikon jalur gambar watermark (seperti: f: /images/icon.png) * @param sumber jalur tanpa watermark (seperti: f: sucapages/6.jpg) * @param output gambar watermark (seperti: f: waterimages/6.jpg) * @param output gambar gambar gambar gambar gambar gambar gambar gambar gambar gambar itu gambar gambar gambar gambar itu gambar gambar gambar gambar gambar gambar gambar gambar gambar gambar ini ; coba {file file = file baru (sumber); File ficon = file baru (ikon); if (! file.isfile ()) {return source + "Bukan file gambar!"; } // Muat ikon ke dalam gambar memori IC = ImageIo.read (ficon); // ikon tinggi int iheight = ic.getHeight (null); // Baca gambar sumber ke dalam gambar memori img = imageo.read (file); // Lebar gambar Int lebar = img.getWidth (null); // tinggi gambar int tinggi = img.getHeight (null); BufferedImage Bi = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); // Buat objek Graphics2D dengan bufferedImage graphics2d g = bi.createGraphics (); // x, default sumbu y untuk memulai dari 0 koordinat int x = 0; int y = 0; // Tinggi interval dari dua gambar tanda air adalah 1/3 dari gambar watermark int temp = iheight/3; int space = 1; if (height> = iheight) {space = height/iheight; if (space> = 2) {temp = y = iheight/2; if (space == 1 || space == 0) {x = 0; y = 0; }}} else {x = 0; y = 0; } // Atur pemrosesan tepi bergerigi dari segmen garis G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); // mewakili gambar dan mengonversi dari ruang gambar ke ruang pengguna sebelum menggambar g.drawimage (img.getscaledInstance (lebar, tinggi, gambar.scale_smooth), 0,0, nol); untuk (int i = 0; i <space; i ++) {if (null! = derajat) {// atur rotasi watermark g.rotate (math.toradians (derajat), (ganda) bi.getwidth () / 2, (ganda) bi.getHeight () / 2); } // Jalur gambar tanda air umumnya adalah GIF atau PNG, sehingga transparansi dapat diatur Imageicon imgicon = Imageicon baru (ikon); // Dapatkan objek gambar. Gambar con = imgicon.getImage (); // Transparansi, nilai minimum adalah 0, nilai maksimum adalah 1 kejelasan float = 0.6F; g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, Clarity)); // Tunjukkan posisi koordinat gambar tanda air (x, y) //g.drawimage(con, 300, 220, null); G.DrawImage (Con, X, Y, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); y+= (icheight+temp); } g.dispose (); File sf = file baru (output, imagename+"."+Imagetype); Imageo.write (BI, Imagetype, SF); // Simpan hasil gambar = "Ikon watermark ditambahkan setelah gambar selesai"; } catch (Exception e) {E.PrintStackTrace (); } hasil pengembalian; }/** * Tambahkan satu gambar watermark ke gambar, dan atur sudut rotasi gambar watermark * @param ikon jalur gambar watermark (seperti: f: /images/icon.png) * @param sumber gambar gambar tanpa watermark (seperti: fizing: fi immagage/suc: suc: @param @param output output jalur gambar setelah menambah watermark a watermages (sucmages: suc: sucpg) * @param output jalur gambar setelah menambah watermark a watermark (suc: suc: fixpg) * @param output output gambar gambar setelah menambah watermark a watermark (suc: suc: @paren @paren 11111) * @param imagetype tipe gambar (seperti: jpg) * @param derajat sudut rotasi gambar tanda air, null berarti tidak ada rotasi */ public string markimageBysingleicon (ikon string, sumber string, output string, string imagename, string imagetype, integer derajat) {string result = "output string, string imagename, string imagetype, integer degrad) {string result =" output string, string imagename, string imagetype, integer degere) {string result = "output string, string imagename, string imagetype, integer degrad) {string result =" output output, string Imagename, String Imagetype, Integer Deger coba {file file = file baru (sumber); File ficon = file baru (ikon); if (! file.isfile ()) {return source + "Bukan file gambar!"; } // Muat ikon ke dalam gambar memori IC = ImageIo.read (ficon); // ikon tinggi int iheight = ic.getHeight (null); // Baca gambar sumber ke dalam gambar memori img = imageo.read (file); // Lebar gambar Int lebar = img.getWidth (null); // tinggi gambar int tinggi = img.getHeight (null); BufferedImage Bi = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); // Buat objek Graphics2D dengan bufferedImage yang ditentukan. Grafik2d g = bi.creategraphics (); // x, default sumbu y untuk memulai dari 0 koordinat int x = 0; int y = (tinggi/2)-(iheight/2); // Atur pemrosesan tepi bergerigi dari segmen garis G.SetrenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); // mewakili gambar dan mengonversi dari ruang gambar ke ruang pengguna sebelum menggambar g.drawimage (img.getscaledInstance (lebar, tinggi, gambar.scale_smooth), 0,0, nol); if (null! = derajat) {// atur rotasi watermark g.rotate (math.toradians (derajat), (ganda) bi.getWidth () / 2, (ganda) bi.getheight () / 2); } // Jalur gambar tanda air umumnya adalah GIF atau PNG, sehingga transparansi dapat diatur Imageicon imgicon = Imageicon baru (ikon); // Dapatkan objek gambar. Gambar con = imgicon.getImage (); // Transparansi, nilai minimum adalah 0, nilai maksimum adalah 1 kejelasan float = 0.6F; g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, Clarity)); // Tunjukkan posisi koordinat gambar tanda air (x, y) //g.drawimage(con, 300, 220, null); G.DrawImage (Con, X, Y, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); g.dispose (); File sf = file baru (output, imagename+"."+Imagetype); Imageo.write (BI, Imagetype, SF); // Simpan hasil gambar = "Ikon watermark ditambahkan setelah gambar selesai"; } catch (Exception e) {E.PrintStackTrace (); } hasil pengembalian; } /** * Add multiple text watermarks to the image, and set the watermark text rotation angle* @param source The image path that needs to be added (such as: F:/images/6.jpg) * @param outPut The image output path after adding the watermark (such as: F:/images/) * @param imageName Image name (such as: 11111) * @param imageType Image type (such as: jpg) * @param warna warna teks tanda air* @param kata teks tanda air* @param derajat sudut rotasi teks tanda air, yang berarti tidak ada rotasi*/ string statis public markImageByMoRetext (sumber string, output string, string imagename, string imagetype, warna warna, kata string, integer derajat) {string hasil = "kesalahan TEAMAN TEKST" DRAKTING "; Coba {// Baca File Informasi Gambar Asli File = File Baru (Sumber); if (! file.isfile ()) {return file + "Bukan file gambar!"; } Image img = ImageIo.read (file); // Lebar gambar Int lebar = img.getWidth (null); // tinggi gambar int tinggi = img.getHeight (null); // ukuran teks ukuran int = 50; // Tambahkan Watermark BufferedImage Bi = BufferedImage baru (Lebar, Tinggi, BufferedImage.type_int_rgb); Grafik2d g = bi.creategraphics (); G.DrawImage (img, 0, 0, lebar, tinggi, null); // Atur font gaya watermark font = font baru ("宋体", font.plain, ukuran); // atur warna tanda air sesuai dengan latar belakang gambar g.setColor (warna); int x = lebar/3; int y = ukuran; int space = tinggi/ukuran; untuk (int i = 0; i <space; i ++) {// Jika sumbu y dari koordinat terakhir lebih tinggi dari tinggi, keluar secara langsung jika ((ukuran y+ukuran)> tinggi) {break; } if (null! = derajat) {// atur rotasi watermark g.rotate (math.toradians (derajat), (ganda) bi.getWidth () / 2, (ganda) bi.getheight () / 2); } g.setFont (font); // posisi tanda air g.drawstring (word, x, y); y+= (ukuran 2*); } g.dispose (); // file output file sf = file baru (output, imagename+"."+Imagetype); Imageo.write (BI, Imagetype, SF); // simpan hasil gambar = "Tambahkan kata watermark setelah penyelesaian gambar"; } catch (Exception e) {E.PrintStackTrace (); } hasil pengembalian; }/** * Tambahkan satu tanda air teks ke gambar, dan atur sudut rotasi teks Watermark * @param Sumber jalur gambar yang perlu ditambahkan dengan tanda air (seperti: f: /images/6.jpg) * @param output gambar output gambar setelah menambahkan watermark (seperti: f:/gambar/) * @param output gambar gambar ImagNeMeTput setelah menambahkan watermark (seperti: f:/gambar/) * @param ImagNeMeName NAMA IMAGNETEMETEMET: AMAGNET NAMATE11111111111111111111 jpg)* @param warna warna teks tanda air* @param kata teks watermark* @param derajat sudut rotasi teks tanda air, yang berarti tidak ada rotasi*/ string statis public MarkImageBySingLeText (sumber string, output, string imagename, string imagetype, warna warner, string word, integer derajat) {string hasil hasil = " Coba {// Baca File Informasi Gambar Asli File = File Baru (Sumber); if (! file.isfile ()) {return file + "Bukan file gambar!"; } Image img = ImageIo.read (file); Int width = img.getWidth (null); int tinggi = img.getheight (null); // Tambahkan Watermark BufferedImage Bi = BufferedImage baru (Lebar, Tinggi, BufferedImage.type_int_rgb); Grafik2d g = bi.creategraphics (); G.DrawImage (img, 0, 0, lebar, tinggi, null); // Atur font gaya watermark font = font baru ("宋体", font.plain, 50); // atur warna tanda air sesuai dengan latar belakang gambar g.setColor (warna); if (null! = derajat) {// atur rotasi watermark g.rotate (math.toradians (derajat), (ganda) bi.getWidth () / 2, (ganda) bi.getheight () / 2); } g.setFont (font); int x = lebar/3; int y = tinggi/2; // posisi tanda air g.drawstring (word, x, y); g.dispose (); // file output file sf = file baru (output, imagename+"."+Imagetype); Imageo.write (BI, Imagetype, SF); // simpan hasil gambar = "Tambahkan kata watermark setelah penyelesaian gambar"; } catch (Exception e) {E.PrintStackTrace (); } hasil pengembalian; }/** * Tambahkan mosaik ke gambar * @param sumber gambar gambar asli (seperti: f: /images/6.jpg) * @param output Setelah mosaiing, jalur untuk menyimpan gambar (seperti: f:/gambar, seperti: seperti: seperti: seperti: seperti: 11111) * @param Imagetype tipe Imagetye (seperti: seperti: seperti: seperti: name ImagePeM (seperti: 11111) * @param Imagetype @Param (seperti: seperti: seperti: seperti: seperti: name Imagename (seperti: 11111) * @param Imagetype @param (seperti: seperti: seperti Imagetype Imagetype @Param (seperti: Jenis Imagetype (seperti: Tinggi setiap persegi panjang * @return */ string statis public MarkImageByMoSaic (sumber string, output string, string imagename, string imagetype, ukuran int) {string result = "gambar kesalahan mosaik gambar terjadi"; coba {file file = file baru (sumber); if (! file.isfile ()) {return file + "Bukan file gambar!"; } BufferedImage img = imageIO.read (file); // Baca Lebar Int Gambar = img.getWidth (null); // Lebar gambar asli int tinggi = img.getHeight (null); // gambar asli BufferedImage Bi = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); // Ukuran kisi mosaik terlalu besar atau terlalu kecil jika (lebar <ukuran || tinggi <ukuran) {return "ukuran grid mosaik terlalu besar"; } if (size <= 0) {return "Ukuran kisi mosaik terlalu kecil"; } int xcount = 0; // Gambarkan angka dalam arah x int ycount = 0; // Gambarkan angka dalam arah y if (lebar % ukuran == 0) {xcount = lebar /ukuran; } else {xcount = lebar / ukuran + 1; } if (height % size == 0) {ycount = tinggi / ukuran; } else {ycount = tinggi / ukuran + 1; } int x = 0; // x Koordinat int y = 0; // y koordinat // gambar mosaic (gambar persegi panjang dan isi warna) grafik2d g = bi.createGraphics (); 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 tidak cukup untuk satu ukuran mwidth = lebar-x; } if (j == ycount-1) {// yang terakhir dalam arah vertikal tidak cukup untuk satu ukuran mheight = tinggi-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 (img.getrgb (centerx, centery)); g.setColor (warna); g.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} g.dispose (); File sf = file baru (output, imagename+"."+Imagetype); Imageo.write (BI, Imagetype, SF); // simpan hasil gambar = "keberhasilan mosaik"; } catch (Exception e) {E.PrintStackTrace (); } hasil pengembalian; }}Untuk lebih banyak konten terkait Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Ringkasan Keterampilan Operasi Gambar Java", "Ringkasan Keterampilan Operasi Tanggal dan Waktu Java", "Ringkasan Keterampilan Operasi Java Dom Node", "Ringkasan File Java dan Keterampilan Operasi Direktori" dan "Tutorial Struktur Data Java dan Algorith.
Saya harap artikel ini akan membantu pemrograman Java semua orang.