Dua hari ini, saya telah mengunggah gambar sesuai dengan kebutuhan saya. Sejujurnya, saya tidak tahu bahwa Java dapat beroperasi seperti ini. Karena ada persyaratan, saya pergi untuk menemukan informasi dan mempelajarinya. Saya akan membagikannya sekarang, berharap dapat membantu saudara yang membutuhkan.
Menambahkan tanda air ke gambar biasa berbeda dari menambahkan tanda air ke animasi. Menambahkan tanda air ke gambar biasa ditulis dalam metode Java sendiri. Kerangka GIF4J digunakan untuk animasi. Ada banyak kerangka kerja yang dapat diunduh di CSDN. Disarankan untuk mengunduh versi retak, karena paket JAR asli akan memiliki tanda air yang tidak dapat digunakan.
impor java.awt.*; impor java.awt.image.bufferedimage; impor java.io.*; impor javax.imageio.imageio; impor javax.swing.imageicon; // Ini adalah kelas dari kerangka gif4j impor com.gif4j.gifdecoder; impor com.gif4j.gifencoder; impor com.gif4j.gifimage; impor com.gif4j.gifTransformer; impor com.gif4j.textpainter; impor com.gif4j.watermark; /*** Dibuat oleh ZXD pada 2018/1/18. */ kelas publik imageremarkutil {// watermark transparansi private float alpha = 0,5f; // Posisi Horizontal Watermark Private Int PositionWidth = 150; // Posisi Vertikal Watermark Private Int PositionHeight = 300; // watermark width private int width = 80; // Watermark Tinggi Int Pribadi Tinggi = 80; // Watermark Text Font Private Font = Font baru ("宋体", font.Bold, 72); // Teks Watermark Warna Pribadi Warna = Color.Red; / ********************* gambar normal dengan tanda air ********// ****@param alpha*Transparansi Watermark*@param Positionwidth*Posisi horizontal watermark*@param PositionHeight*Watermark Posisi Vertikal*@param Font*Teks Watermark Font*@param Warna*Teks Watermark*WATERMARK*Public Font*Teks Watermark Font*@param Color*Teks Watermark*WATERMARK*@param font*Teks Watermark Font*@param warna*Teks Watermark*WATERMARK*Public Font PositionHeight, int lebar, tinggi int, font font, warna warna) {if (alpha! = 0.0f) this.alpha = alpha; if (positionwidth! = 0) this.positionWidth = PositionWidth; if (positionheight! = 0) this.positionheight = PositionHeight; if (tinggi! = 0) this.height = tinggi; if (lebar! = 0) this.width = lebar; if (font! = null) this.font = font; if (color! = null) this.color = color; } / ** * Tambahkan gambar tanda air ke gambar * * @param iconpath * jalur gambar tanda air * @param srcimgpath * jalur gambar sumber * @param targetPath * jalur gambar target * / public void markimageByicon (string iconpath, string srcimgpath, string targetpath) {markimageByicon (string srcimgpath, string targetpath) {markimageByicon (string srcimgpath, string targetpath) {markimageByicon (string srcimgpath, string targetpath) {markimageByicon } /** * Add a watermark image to the image, and set the rotation angle of the watermark image* * @param iconPath * Watermark image path* @param srcImgPath * Source image path* @param targetPath * Target image path* @param degree * Watermark image rotation angle*/ public void markImageByIcon(String iconPath, String srcImgPath, String targetPath, Integer degree) {OutputStream os = null; coba {gambar srcimg = imageIo.read (file baru (srcimgpath)); BufferedImage buffimg = baru buferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Dapatkan Objek Sikat Graphics2d G = BuffImg.Creategraphics (); // 2. Atur pemrosesan tepi bergerigi dari segmen garis G.SetrenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.drawimage (srcimg.getscaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 3. Atur rotasi watermark if (null! = Derajat) {g.rotate (math.toradians (derajat), (ganda) buffimg.getwidth () / 2, (ganda) buffimg.getheight () / 2); } // 4. Jalur gambar tanda air gambar watermark umumnya gif atau png, sehingga transparansi dapat diatur Imageicon imgicon = new Imageicon (IconPath); // 5. Dapatkan objek gambar. Gambar img = imgicon.getImage (); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); Integer x = srcimg.getwidth (null); Integer y = srcimg.getHeight (null); // 6. Lokasi gambar tanda air g.drawimage (img, x- (positionwidth+lebar), y- (positionheight+tinggi), lebar, tinggi, null); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 7. Lepaskan sumber daya G.Dispose (); // 8. Hasilkan gambar OS = FileOutputStream baru (TargerPath); Imageo.write (Buffimg, "JPG", OS); System.out.println ("Gambar Lengkap Tambahkan Watermark Image"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {coba {if (null! = os) os.close (); } catch (Exception e) {E.PrintStackTrace (); }}}} / ** * Tambahkan teks tanda air ke gambar * * @param Logotext * Teks Watermark * @param srcimgpath * jalur gambar sumber * @param targetPath * jalur gambar target * / public void markimageByText (string logotext, string srcimgpath, string targetpath) {MarkimageByText, string, string srcimgpath, string targetpath) {MarkimageByText, string, string srcimgpath, string targetpath) {MarkimageBytext } /** * Add watermark text to the image, and set the rotation angle of the watermark text* * @param logoText * @param logoText * @param srcImgPath * @param targetPath * @param degree */ public void markImageByText(String logoText, String srcImgPath, String targetPath, Integer degree) { InputStream is = null; OutputStream OS = null; coba {// 1. Gambar Sumber Gambar Srcimg = Imageo.read (File Baru (SRCIMGPath)); BufferedImage buffimg = baru buferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 2. Dapatkan Objek Sikat Graphics2d G = BuffImg.Creategraphics (); // 3. Atur pemrosesan tepi bergerigi dari segmen garis G.SetrenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.drawimage (srcimg.getscaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 4. Atur rotasi watermark if (null! = Derajat) {g.rotate (math.toradians (derajat), (ganda) buffimg.getWidth () / 2, (ganda) buffimg.getheight () / 2); } // 5. Atur WATERMARK Teks Warna G.SetColor (Color); // 6. Setel Watermark Teks Font G.SetFont (Font); // 7. Atur transparansi teks watermark g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // 8. Parameter pertama -> mengatur konten, dua parameter berikutnya -> Koordinat posisi teks pada gambar (x, y) g.drawstring (logotext, positionwidth, positionheight); // 9. Lepaskan sumber daya G.Dispose (); // 10. Hasilkan gambar os = FileOutputStream baru (TargerPath); Imageo.write (Buffimg, "JPG", OS); System.out.println ("Gambar Lengkap Tambah Teks Watermark"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {coba {if (null! = is is.close (); } catch (Exception e) {E.PrintStackTrace (); } coba {if (null! = os) os.close (); } catch (Exception e) {E.PrintStackTrace (); }}} / ******************* Gifdecoder.decode (src); // Buat objek gifimage. Gifimage resezeiMg = giftransformer.resize (gifimage, lebar, tinggi, benar); Gifencoder.encode (resezeimg, dest); } // Skala gambar GIF, langsung lewati jalur file, dan atur lebar dan tinggi public void makeGif (String SRC, String Dest, Int Width, Int Height) melempar ioException {gifimage gifimage = gifdecoder.decode (file baru (src));//Buat objek gifimage. makeGif (file baru (src), file baru (dest), gifimage.getscreenwidth () / 2, gifimage.getScreenHeight () / 2); } // Scaling GIF Image, Meneruskan File File, Lebar dan Tinggi Tidak Dapat Diatur Public Void MakeGif (File SRC, File Dest) Melempar IOException {gifimage gifimage = gifdecoder.decode (src); // Buat objek gifimage. makegif (src, dest, gifimage.getscreenwidth () / 2, gifimage.getScreenHeight () / 2); } // scaling gambar gif, lewat jalur file, dan tidak mengatur lebar dan tinggi public void makeGif (string src, string dest) melempar ioException {makeGif (file baru (src), file baru (dest)); } /*** Tambahkan teks watermark ke animasi* /public void addTextWaterMarkToGif (file src, string watermarkText, file dest) melempar ioException {// inisialisasi dan pengaturan watermark (font, gaya, ukuran, warna) textpainter TextPainter = TextPainter baru (font baru ("bold", bold ", font", bold ", bold", font ", bold", bold ", font", bold ", bold", font ", bold", bold ", font", bold ", bold", font ", bold", bold ", font", bold ", bold", font ", bold", font ", bold", bold ", font", BOLD ", BOLD". textpaint.setoutlinepaint (color.white); BufferedImage renderedWaterMarkText = TextPainter.Renderstring (WatarkText, True); // gambar objek gifimage gf = gifdecoder.decode (src); // Dapatkan ukuran gambar int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Dapatkan ukuran watermark int tw = renderedWaterMarkText.getWidth (); int th = renderedWaterMarkText.getHeight (); // Watermark Point p = new point (); px = iw - tw - 5; py = ih - th - 4; // Tambahkan tanda air watermark watermark = tanda air baru (renderedwatermarkText, p); gf = watermark.Apply (gifdecoder.decode (src), true); // output gifencoder.encode (gf, dest); } / *** Tambahkan watermark gambar dalam animasi* / public void addImagewaterMarkTogif (file src, string watermarkpath, file dest) {coba {buferedimage renderedwatermarkText = imageo.read (file baru (watermarkpath)); // gambar objek gifimage gf = gifdecoder.decode (src); // Dapatkan ukuran gambar int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Dapatkan ukuran watermark int tw = renderedWaterMarkText.getWidth (); int th = renderedWaterMarkText.getHeight (); // titik posisi tanda air p = titik baru (); px = IW-TW-20; py = ih-th-20; // watermark watermark watermark = tanda air baru (renderedwatermarkText, p); // watermark transparansi watermark.settransparency (1); gf = watermark.Apply (gifdecoder.decode (src), false); // output gifencoder.encode (gf, dest); } catch (ioException e) {e.printstacktrace (); }} public static void main (string [] args) {// path di mana gambar perlu menjadi string bertanda air srcimgpath = "d: /1.jpg"; String Logotext = "Salin Invalid"; // jalur gambar watermark iconPath = "d: /2.jpg"; // Jalur output dari file watermark string targettextpath = "d: /qie_text.jpg"; String targetTextPath2 = "d: /qie_text_rotate.jpg"; String targeticonpath = "d: /qie_icon.jpg"; String targeticonpath2 = "d: /qie_icon_rotate.jpg"; System.out.println ("Untuk mulai menambahkan teks tanda air ke gambar ..."); // Gambar Teks Watermark MarkImageByText (Logotext, Srcimgpath, TargettextPath); // Tambahkan teks tanda air ke gambar, rotasi teks tanda air -45 markimageByText (logotext, srcimgpath, targetextpath2, -45); System.out.println ("Tambahkan teks tanda air ke gambar, end ..."); System.out.println ("Tambahkan gambar Watermark ke gambar, mulai ..."); setimagemarkoptions (0,3f, 1, 1, null, null); // Tambahkan gambar tanda air ke gambar, rotasi gambar tanda air -45 markimagebyicon (IconPath, srcimgpath, targeticonpath2, -45); System.out.println ("Tambahkan tanda air ke ujung gambar ..."); // Tambahkan tanda air di gambar animasi (tambahkan file animasi watermark, tambahkan watermark, tambahkan file output) addTextWaterMarkTogif (file baru ("d: //10.gif"), "Salin Invalid", file baru ("D: //11.gif")); addimagewatermarktogif (file baru ("d: //gif//10.gif"), "d: //gif//3.png", file baru ("d: //gif//4.gif")); }}Berikut adalah metode menambahkan tanda air ke gambar biasa dan menambahkan tanda air ke animasi. Jika metode menambahkan tanda air ke gambar biasa dapat berhasil ditambahkan jika gambar ditransmisikan, gambar akan menjadi statis. Jika metode menambahkan tanda air ke animasi ditransmisikan, kesalahan akan dilaporkan secara langsung.
Saya telah mencoba ini ketika saya melakukannya, jadi saya akan mencatat dan merekamnya di sini sekarang, dan saya berharap mereka dapat membantu saudara yang membutuhkan.
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.