Estos dos días, he estado cargando imágenes de acuerdo con mis necesidades. Para ser honesto, no sé que Java puede operar así. Como hay un requisito, fui a encontrar la información y la estudié. Lo compartiré ahora, con la esperanza de ayudar a los hermanos necesitados.
Agregar marcas de agua a las imágenes ordinarias es diferente de agregar marcas de agua a las animaciones. Agregar marcas de agua a las imágenes ordinarias está escrito en el propio método de Java. El marco GIF4J se usa para animaciones. Hay muchos marcos que se pueden descargar en CSDN. Se recomienda descargar la versión agrietada, porque el paquete JAR original tendrá una marca de agua que no se puede usar.
import java.awt.*; import java.awt.image.bufferedImage; import java.io.*; import javax.imageio.imageio; import javax.swing.imageicon; // Esta es la clase de la importación de marco gif4j com.gif4j.gifdecoder; import com.gif4j.gifencoder; import com.gif4j.gifiMage; import com.gif4j.giftransformer; import com.gif4j.TextPainter; import com.gif4j.watermark; /*** Creado por ZXD en 2018/1/18. */ public class ImageremarkUtil {// Watermark Transparencia privada Float alfa = 0.5f; // Posición horizontal de marca de agua Private int PositionWidth = 150; // Posición vertical de marca de agua Private int posicionHeight = 300; // Watermark Ancho Private Int Width = 80; // WaterMark High Private Int Altura = 80; // Fuente de texto de marca de agua fuente privada de fuente = nueva fuente ("宋体", font.bold, 72); // Color de texto de marca de agua Color privado Color = Color.Red; /********************* Normal image with watermark**********/ /** * * @param alpha * Watermark transparency* @param positionWidth * Watermark horizontal position* @param positionHeight * Watermark vertical position* @param font * Watermark text font* @param color * Watermark text color*/ public void setImageMarkOptions(float alpha, int posición de posición, int posicionHeight, int ancho, int altura, fuente de fuente, color color) {if (alpha! = 0.0f) this.alpha = alfa; if (PositionWidth! = 0) this.PositionWidth = PositionWidth; if (posicionHeight! = 0) this.PositionHeight = PositionHeight; if (altura! = 0) this.Height = altura; if (ancho! = 0) this.width = width; if (font! = null) this.font = font; if (color! = null) this.color = color; } /** * Add a watermark image to the image* * @param iconPath * Watermark image path* @param srcImgPath * Source image path* @param targetPath * Target image path */ public void markImageByIcon(String iconPath, String srcImgPath, String targetPath) { markImageByIcon(iconPath, srcImgPath, targetPath, null); } / *** Agregue una imagen de marca de agua a la imagen y establezca el ángulo de rotación de la imagen de la marca de agua** @param iconpath* ruta de imagen de marca de agua* @param srcimgpath* fuente de imagen ruta* @param targetPath* Target Image ruta* @param grado* Ángulo de rotación de imagen de calámar OutputStream OS = NULL; intente {Image srcimg = imageIO.read (nuevo archivo (srcimgpath)); BufferedImage Buffimg = nueva BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Obtenga los gráficos de objeto de pincel2d g = buffimg.createGraphics (); // 2. Establezca el procesamiento de borde irregular del segmento de línea G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilineal); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 3. Establezca la rotación de la marca de agua if (null! = Grado) {g.rotate (math.toradians (grado), (doble) buffimg.getwidth () / 2, (doble) buffimg.getheight () / 2); } // 4. La ruta de la imagen de la marca de agua La imagen de la marca de agua es generalmente GIF o PNG, de modo que la transparencia se puede configurar Imageicon imgicon = new Imageicon (IconPath); // 5. Obtenga el objeto de imagen. Imagen img = imgicon.getImage (); G.SetComposite (alphacomposis.getInstance (alphacomposis.src_atop, alfa)); Entero x = srcimg.getWidth (nulo); Entero y = srcimg.getheight (nulo); // 6. La ubicación de la imagen de la marca de agua G.Drawimage (img, x- (valor de posición+ancho), y- (posicionHeight+altura), ancho, altura, nulo); G.SetComposite (alfacomposis.getInstance (alfacomposis.src_over)); // 7. Libere el recurso G.Dispose (); // 8. Generar imagen OS = nueva FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", os); System.out.println ("Imagen completa Agregar imagen de marca de agua"); } catch (Exception e) {E.PrintStackTrace (); } finalmente {try {if (null! = os) os.close (); } catch (Exception e) {E.PrintStackTrace (); } } } } /** * Add watermark text to the image * * @param logoText * Watermark text* @param srcImgPath * Source image path* @param targetPath * Target image path*/ public void markImageByText(String logoText, String srcImgPath, String targetPath) { markImageByText(logoText, srcImgPath, targetPath, null); } / ** * Agregue el texto de la marca de agua a la imagen y establezca el ángulo de rotación del texto de la marca de agua * * @param logotext * @param logotext * @param srcimgpath * @param targetPath * @param grado * / public void markImageText (string logotext, string srcImgpath, string stringpath, integer) {inputStream es = neco de string, string srcImgpath, string TargetPath, intenso) {InputStream es = neco de cadena, string srcImgpath, string TargetPath, intenso) {InputStream es = nelle de necox. OutputStream OS = NULL; intente {// 1. Imagen de origen srcimg = imageIO.read (nuevo archivo (srcImgPath)); BufferedImage Buffimg = nueva BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 2. Obtenga los gráficos de objeto de pincel2d g = buffimg.createGraphics (); // 3. Establezca el procesamiento de borde irregular del segmento de línea G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilineal); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 4. Establezca la rotación de la marca de agua if (null! = Grado) {g.rotate (math.toradians (grado), (doble) buffimg.getwidth () / 2, (doble) buffimg.getheight () / 2); } // 5. Establezca el color de texto de la marca de agua G.SetColor (color); // 6. Establezca la fuente de texto de la marca de agua G.SetFont (fuente); // 7. Establezca la transparencia del texto de la marca de agua G.SetCompositE (alphacomposis.getInstance (alphacomposis.src_atop, alfa)); // 8. El primer parámetro -> Establecer contenido, los siguientes dos parámetros -> Coordinar la posición del texto en la imagen (x, y) G.Drawstring (logotext, posicionwidth, posicionHeight); // 9. Libere el recurso G.Dispose (); // 10. Generar la imagen OS = nuevo FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", os); System.out.println ("Imagen completo Agregar texto de marca de agua"); } catch (Exception e) {E.PrintStackTrace (); } finalmente {try {if (null! = is) is.close (); } catch (Exception e) {E.PrintStackTrace (); } try {if (null! = os) os.close (); } catch (Exception e) {E.PrintStackTrace (); }}} / *********************** La imagen de la animación está marcada con agua ****************** / / ***Escala de la imagen GIF, que pasa directamente el archivo de archivo, puede establecer el ancho y la altura* / public void makegif (archivo src, archivo dest, int width, int aldt) lanza ioexception {gifimage gifimage = = = = = = = = = = = = = = = = = = = = Gifdecoder.decode (src); // crear un objeto gifimage. Gifimage resizeimg = giftransformer.resize (gifimage, ancho, altura, verdadero); Gifencoder.encode (resizeimg, des); } // Escala la imagen GIF, pase directamente la ruta del archivo y establezca el ancho y la altura public void makeGif (string src, string Dest, int width, int altura) lanza ifiException {gifimage gifimage = gifdecoder.decode (nuevo archivo (src)); // crea un objeto de gifimage. makeGIF (nuevo archivo (SRC), nuevo archivo (Dest), gifiMage.getScreenWidth () / 2, gifiMage.getScreenHeight () / 2); } // Escalar la imagen GIF, el archivo de archivo de paso, el ancho y la altura no se pueden establecer public void makeGif (archivo src, archivo dest) lanza ioexception {gifimage gifimage = gifdecoder.decode (src); // crea un objeto de gifimage. MakEgif (SRC, Dest, GifiMage.getScreenWidth () / 2, Gifimage.getScreenHeight () / 2); } // Escalar la imagen GIF, pasar la ruta del archivo y no configurar el ancho y la altura public void makeGif (string src, string des) lanza ioexception {makeGIF (nuevo archivo (src), nuevo archivo (des)); } /*** Agregue la marca de agua de texto a la animación* /public void addTextwaterMarkTogif (file src, string watermarktext, file dest) lanza ioexception {// initialización y configuración de marca de agua (font, estilo, tamaño, color) TextPainter TextPainter = New TextPainter (New Font ("Bold", Font.italic, 12)); textPainter.setOutLinePaint (color.white); BufferedImage RenderedWaterMarkText = TextPainter.RenderString (WaterMarkText, True); // Imagen objeto gifimage gf = gifdecoder.decode (src); // Obtener el tamaño de la imagen int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Obtener el tamaño de marca de agua int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // Punto de marca de agua p = nuevo punto (); PX = IW - TW - 5; py = ih - th - 4; // Agregar marca de agua Marca de agua Marca de agua = nueva marca de agua (RenderedwatermarkText, p); gf = Watermark.apply (gifdecoder.decode (src), true); // emitir gifencoder.encode (GF, Dest); } / *** Agregar marca de agua de imagen en la animación* / public void addImagewatermarkTogif (archivo src, string watermarkpath, archivo des) {try {bufferedImage renderedwatermarktext = imageIO.read (nuevo archivo (watermarkpath)); // Imagen objeto gifimage gf = gifdecoder.decode (src); // Obtener el tamaño de la imagen int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Obtener el tamaño de marca de agua int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // Punto de posición de la marca de agua P = nuevo punto (); Px = IW-TW-20; py = ih-th-20; // Watermark Watermark WaterMark = New Watermark (RenderedwatermarkText, P); // Transparencia de marca de agua Watermark.SetTransparency (1); gf = Watermark.apply (gifdecoder.decode (src), falso); // emitir gifencoder.encode (GF, Dest); } catch (ioException e) {E.PrintStackTrace (); }} public static void main (string [] args) {// ruta donde la imagen debe ser cadena marcada con agua srcimgpath = "d: /1.jpg"; String logotext = "copiar inválido"; // La ruta de la imagen de la marca de agua String iconPath = "d: /2.jpg"; // La ruta de salida de la cadena de archivo de marca de agua TargetTextPath = "d: /qie_text.jpg"; String TargetTextPath2 = "d: /qie_text_rotate.jpg"; Cadena TargetiConPath = "d: /qie_icon.jpg"; Cadena TargetiConPath2 = "d: /qie_icon_rotate.jpg"; System.out.println ("para comenzar a agregar texto de marca de agua a la imagen ..."); // El texto de la marca de agua MarkImageByText (logotext, srcimgpath, targetTextPath); // Agregue el texto de la marca de agua a la imagen, rotación del texto de la marca de agua -45 MarkImageByText (logotext, srcimgpath, TargetTextPath2, -45); System.out.println ("Agregar texto de marca de agua a la imagen, finalizar ..."); System.out.println ("Agregue la imagen de la marca de agua a la imagen, inicie ..."); setImageMarkOptions (0.3f, 1, 1, nulo, nulo); // Agregar imagen de marca de agua a la imagen, rotación de la imagen de la marca de agua -45 MarkImageByicon (IconPath, SrcimgPath, TargetiConPath2, -45); System.out.println ("Agregar marca de agua a los extremos de la imagen ..."); // Agregar marcas de agua en la imagen de animación (agregue el archivo de animación de marca de agua, agregue la marca de agua, agregue el archivo de salida) addTextwatermarkTogif (nuevo archivo ("d: //10.gif"), "copiar inválido", nuevo archivo ("d: //11.gif")); AddImagewatermarkTogif (nuevo archivo ("d: //gif//10.gif"), "d: //gif//3.png", nuevo archivo ("d: //gif//4.gif")); }}Estos son los métodos para agregar marcas de agua a imágenes ordinarias y agregar marcas de agua a las animaciones. Si el método de agregar marcas de agua a las imágenes ordinarias se puede agregar con éxito si la imagen se transmite, la imagen se volverá estática. Si se transmite el método de agregar marcas de agua a las animaciones, el error se informará directamente.
Lo he probado cuando los estuviera haciendo, así que tomaré notas y las grabé aquí ahora, y espero que puedan ayudar a los hermanos necesitados.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.