Esses dois dias, tenho enviado imagens de acordo com minhas necessidades. Para ser sincero, não sei se Java pode operar assim. Como há um requisito, fui encontrar as informações e as estudei. Vou compartilhar agora, esperando ajudar os irmãos necessitados.
Adicionar marcas d'água a imagens comuns é diferente de adicionar marcas d'água às animações. A adição de marcas d'água a imagens comuns está escrita no próprio método de Java. A estrutura GIF4J é usada para animações. Existem muitas estruturas que podem ser baixadas no CSDN. Recomenda -se baixar a versão rachada, porque o pacote JAR original terá uma marca d'água que não pode ser usada.
importar java.awt.*; importar java.awt.image.bufferiMage; importar java.io.*; importar javax.imageio.imageio; importar javax.swing.imageicon; // Esta é a classe do GIF4J Framework Import com.gif4j.gifdecoder; importação com.gif4j.gifencoder; importação com.gif4j.gifimage; importar com.gif4j.giftransformer; importar com.gif4j.textPainter; importação com.gif4j.watermark; /*** Criado pelo ZXD em 2018/1/18. */ public classe imageRemarkutil {// Watermark Transparency Private Float Alpha = 0,5f; // Posição horizontal da marca d'água Private int POSIÇÃO LWIDTH = 150; // Posição vertical da marca d'água private int positionHeight = 300; // largura da marca d'água Private int width = 80; // marca d'água High Private Int Hight = 80; // Fonte da fonte de texto de marca d'água Fonte privada Fonte = nova fonte ("宋体", font.Bold, 72); // TEXTO DA VAILA COLAÇÃO PRIVADA CO cor = cor.red; ********************* int positionHeight, int width, int altura, fonte de fonte, cor da cor) {if (alfa! = 0,0f) this.alpha = alfa; if (positionwidth! = 0) this.PositionWidth = POSITIONWIDTH; if (positionHeight! = 0) this.PositionHeight = POSITIONHEIXE; if (altura! = 0) this.Height = altura; if (largura! = 0) this.width = width; if (font! = null) this.font = font; if (color! = null) this.color = cor; } / ** * Adicione uma imagem de marca d'água à imagem * * @param iconPath * Caminho da imagem da marca de água * @param srcimgpath * caminho de imagem de fonte * @param TargetPath * Caminho da imagem de destino * / public void MarkImageByicon (string iconPath, string srcimgpath, string), MarkImageByicon (ICONPATH, srcimgpath, string) {MarkImathPathpath; } / *** Adicione uma imagem da marca d'água à imagem e defina o ângulo de rotação da imagem da marca d'água** @param iconpath* Caminho da imagem da marca de água* @param srcimgpath* path de imagem* @param alvopath* alvo de imagem* @param graus* rotação de imagem sr* / public void markImageByicon (stringpathpath* string, strings* string* string de string* string de imagem sr. nulo; tente {imagem srcimg = imageio.read (novo arquivo (srcimgpath)); BufferImage buffimg = new bufferImage (srcimg.getwidth (null), srcimg.getheight (null), bufferiMage.type_int_rgb); // 1. Obtenha o objeto de escova Graphics2d g = buffimg.creategraphics (); // 2. Defina o processamento de borda irregular do segmento de linha G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.Drawimage (srcimg.getScaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, nulo); // 3. Defina a rotação da marca d'água se (nulo! = Grau) {g.rotate (math.toradians (grau), (duplo) buffimg.getWidth () / 2, (duplo) buffimg.getHeight () / 2); } // 4. O caminho da imagem da marca d'água que a imagem da marca d'água é geralmente gif ou png, para que a transparência possa ser definida imageicon imgicon = new imageicon (iconpath); // 5. Obtenha o objeto de imagem. Imagem img = imgicon.getImage (); g.SetComPosite (alphacomposite.getInstance (alphacomposite.src_atop, alfa)); Número inteiro x = srcimg.getwidth (null); Inteiro y = srcimg.getHeight (nulo); // 6. A localização da imagem da marca d'água G.Drawimage (IMG, X- (largura da posição+largura), y- (altura posicional+altura), largura, altura, nula); g.SetComPosite (alphacomposite.getInstance (alphacomposite.src_over)); // 7. Libere o recurso G.Dispose (); // 8. Gere a imagem OS = new FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", os); System.out.println ("Imagem completa adicionar imagem de marca d'água"); } catch (Exceção e) {e.printStackTrace (); } finalmente {tente {if (null! = os) os.close (); } catch (Exceção e) {e.printStackTrace (); }}}} / ** * Adicione o texto da marca de água à imagem * * @param logotext * Texto da marca de água * @param srcimgpath * caminho de imagem de origem * @param TargetPath * Caminho da imagem de destino * / public void MarkImageByText (string logotExt, strcimgpath, stringpathPathPathPathPathPathPathText (LogExt, strcimgpath, stringPathPath) (LogExtTxt); } / ** * Adicione o texto da marca de água à imagem e defina o ângulo de rotação do texto da marca d'água * * @param logotExt * @param logotext * @param srcimgpath * @param targath * @param grau * / public void markImageByTexT (string logotExt, strcimgpath, string -alvo, string no inteiro). OutputStream OS = NULL; tente {// 1. imagem de origem imagem srcimg = imageio.read (novo arquivo (srcimgpath)); BufferImage buffimg = new bufferImage (srcimg.getwidth (null), srcimg.getheight (null), bufferiMage.type_int_rgb); // 2. Obtenha o objeto de escova Graphics2d g = buffimg.creategraphics (); // 3. Defina o processamento de borda irregular do segmento de linha G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.Drawimage (srcimg.getScaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, nulo); // 4. Defina a rotação da marca d'água se (nulo! = Grau) {g.rotate (math.toradians (grau), (duplo) buffimg.getwidth () / 2, (duplo) buffimg.getHeight () / 2); } // 5. Defina a cor do texto da marca de água G.setColor (cor); // 6. Defina a fonte de texto da marca d'água G.SetFont (Font); // 7. Defina a transparência do texto da marca de água G.SetComposite (alphacomposite.getInstance (alphacomposite.src_atop, alfa)); // 8. O primeiro parâmetro -> Defina o conteúdo, os próximos dois parâmetros -> Posição de coordenadas do texto na figura (x, y) g.DrawString (logotext, PositionWidth, PositionHeight); // 9. Libere o recurso G.Dispose (); // 10. Gere a imagem OS = new FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", os); System.out.println ("Imagem completa adicionar texto da marca d'água"); } catch (Exceção e) {e.printStackTrace (); } finalmente {tente {if (null! = is) is.close (); } catch (Exceção e) {e.printStackTrace (); } tente {if (null! = os) os.close (); } catch (Exceção e) {e.printStackTrace (); }}} / ******************* Gifdecoder.Decode (SRC); // Crie um objeto Gifimage. Gifimage redizeimg = giftransformer.Resize (gifimage, largura, altura, verdadeiro); Gifencoder.Encode (redimensionamento, dest); } // Escala a imagem do GIF, passe diretamente no caminho do arquivo e defina a largura e a altura do vazio público Makegif (String src, string dest, int largura, int altura) lança a ioexception {gifimage gifimage = gifdecoder.decode (new arquivo (src)); // criar um objeto de gifimage. makegif (novo arquivo (src), novo arquivo (dest), gifimage.getScreenwidth () / 2, gifimage.getScreenHeight () / 2); } // A imagem GIF de escala, passando o arquivo, a largura e a altura não pode ser definido public void makegif (arquivo src, arquivo dest) lança ioexception {gifimage gifimage = gifdecoder.decode (src); // cria um objeto Gifimage. makegif (src, dest, gifimage.getScreenwidth () / 2, gifimage.getScreenHeight () / 2); } // Escalando a imagem do GIF, passando o caminho do arquivo e não definindo largura e altura public void makegif (string src, string dest) lança ioexception {makegif (novo arquivo (src), novo arquivo (dest)); } /*** Adicione o texto à marca d'água à animação* /public void addTextwatermarktogif (arquivo src, string watermarktext, arquivo dest) lança ioexception {// inicialização e configuração da marca d'água (font, estilo, tamanho, cor) textpainter textpainter = novo textpainter (novo; textpainter.setOutLinePaint (color.white); BufferImage renderedwatermarktext = textpainter.renderString (watermarktext, true); // imagem GIFIMAGE GFIMAGE GF = gifdecoder.Decode (SRC); // obtenha o tamanho da imagem int iw = gf.getScreenwidth (); int ih = gf.getScreenHeight (); // obtenha o tamanho da marca d'água int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getHeight (); // ponto de marca d'água P = new Point (); px = iw - tw - 5; py = ih - th - 4; // Adicione marca d'água marca d'água na marca d'água = nova marca d'água (renderedwatermarktext, p); gf = watermark.apply (gifdecoder.Decode (src), true); // saída gifencoder.encode (gf, dest); } / *** Adicione a marca d'água da imagem na animação* / public void addimagewatermarktogif (arquivo src, string watermarkpath, arquivo dest) {try {bufferImage renderedwatermarktext = imageio.read (novo arquivo (watermarkpath)); // imagem GIFIMAGE GFIMAGE GF = gifdecoder.Decode (SRC); // obtenha o tamanho da imagem int iw = gf.getScreenwidth (); int ih = gf.getScreenHeight (); // obtenha o tamanho da marca d'água int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getHeight (); // ponto de posição da marca d'água Point P = new Point (); px = iw-tw-20; py = ih-th-20; // marca d'água marca d'água marca d'água = nova marca d'água (renderedwatermarktext, p); // marca d'água transparência aquática.Setransparency (1); gf = watermark.apply (gifdecoder.Decode (src), false); // saída gifencoder.encode (gf, dest); } catch (ioexception e) {e.printStackTrace (); }} public static void main (string [] args) {// caminho em que a imagem precisa ser marcada com marca d'água srcimgpath = "d: /1.jpg"; String logotExt = "Copy inválido"; // O caminho da imagem da marca d'água de string iconpath = "d: /2.jpg"; // O caminho de saída do arquivo de marca de água segmenttextpath = "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 ("para começar a adicionar texto de marca d'água à imagem ..."); // A imagem da marca d'água da imagem MarkImageByText (logotext, srcimgpath, TargetTextPath); // Adicione o texto da marca d'água à imagem, rotação de texto de marca d'água -45 MarkImageByText (logotext, srcimgPath, TargetTextPath2, -45); System.out.println ("Adicione texto da marca d'água à imagem, fim ..."); System.out.println ("Adicione a imagem da marca d'água à imagem, inicie ..."); SetImageMarkoptions (0,3f, 1, 1, nulo, nulo); // Adicione a imagem da marca d'água à imagem, rotação da imagem da marca d'água -45 MarkImageByicon (ICONPATH, SRCIMGPATH, TargeticonPath2, -45); System.out.println ("Adicione a marca d'água às extremidades da imagem ..."); // Adicione a marca d'água na imagem de animação (adicione o arquivo de animação de marca d'água, adicione a marca d'água, adicione o arquivo de saída) AddTextwaterMarkTogif (novo arquivo ("d: //10.gif"), "copie inválido", novo arquivo ("d: //11.gif")); addimagewatermarktogif (novo arquivo ("d: //gif//10.gif"), "d: //gif//3.png", novo arquivo ("d: //gif//4.gif")); }}Aqui estão os métodos de adição de marcas d'água a imagens comuns e adicionar marcas d'água às animações. Se o método de adicionar marcas d'água a imagens comuns puder ser adicionado com sucesso se a imagem for transmitida, a imagem se tornará estática. Se o método de adicionar marcas d'água às animações for transmitido, o erro será relatado diretamente.
Eu tentei isso quando estava fazendo, então vou fazer anotações e gravá -las aqui agora, e espero que eles possam ajudar os irmãos necessitados.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.