java.imageIo给图片添加水印的实现代码

java.imageIo给图片添加水印的实现代码,第1张

最近项目在做一个商城项目 项目上的图片添加水印① 添加图片水印②:添加文字水印一下提供下个方法 希望大家可以用得着   复制代码 代码如下: package blogs imageimport java awt AlphaCompositeimport java awt Colorimport java awt Fontimport java awt Graphics Dimport java awt Imageimport java awt RenderingHintsimport java awt image BufferedImageimport java io Fileimport java io FileOutputStreamimport java io InputStreamimport java io OutputStreamimport javax imageio ImageIOimport javax swing ImageIcon/**  * 图片水印  */ public class ImageUtil {     /**      * @param args      */     public static void main(String[] args) {         String srcImgPath = "e:/ png"        String iconPath = "e:logo jpg"        String targerPath = "e:/ jpg"        // 给图片添加水印         ImageUtil waterMarkImageByIcon(iconPath srcImgPath targerPath f)        // 给图片添加水印 水印旋转         // ImageMarkLogoByIcon markImageByIcon(iconPath srcImgPath         // targerPath )    }     /**      * 给图片添加水印 可设置水印图片旋转角度      *      * @param iconPath      *            水印图片路径      * @param srcImgPath      *            源图片路径      * @param targerPath      *            目标图片路径      * @param degree      *            水印图片旋转角度      * @param width      *            宽度(与左相比)      * @param height      *            高度(与顶相比)      * @param clarity      *            透明度(小于 的数)越接近 越透明      */     public static void waterMarkImageByIcon(String iconPath String srcImgPath             String targerPath Integer degree Integer width Integer height             float clarity) {         OutputStream os = null        try {             Image srcImg = ImageIO read(new File(srcImgPath))            System out println("width:" + srcImg getWidth(null))            System out println("height:" + srcImg getHeight(null))            BufferedImage buffImg = new BufferedImage(srcImg getWidth(null)                     srcImg getHeight(null) BufferedImage TYPE_INT_RGB)            // 得到画笔对象             // Graphics g= buffImg getGraphics()            Graphics D g = buffImg createGraphics()            // 设置对线段的锯齿状边缘处理             g setRenderingHint(RenderingHints KEY_INTERPOLATION                     RenderingHints VALUE_INTERPOLATION_BILINEAR)            g drawImage(                     srcImg getScaledInstance(srcImg getWidth(null)                             srcImg getHeight(null) Image SCALE_SMOOTH)                     null)            if (null != degree) {                 // 设置水印旋转                 g rotate(Math toRadians(degree)                         (double) buffImg getWidth() /                         (double) buffImg getHeight() / )            }             // 水印图象的路径 水印一般为gif或者png的 这样可设置透明度             ImageIcon imgIcon = new ImageIcon(iconPath)            // 得到Image对象             Image img = imgIcon getImage()            float alpha = clarity// 透明度             g setComposite(AlphaComposite getInstance(AlphaComposite SRC_ATOP                     alpha))            // 表示水印图片的位置             g drawImage(img width height null)            g setComposite(AlphaComposite getInstance(AlphaComposite SRC_OVER))            g dispose()            os = new FileOutputStream(targerPath)            // 生成图片             ImageIO write(buffImg "JPG" os)            System out println("添加水印图片完成!")        } catch (Exception e) {             e printStackTrace()        } finally {             try {                 if (null != os)                     os close()            } catch (Exception e) {                 e printStackTrace()            }         }     }     /**      * 给图片添加水印 可设置水印图片旋转角度      *      * @param logoText      *            水印文字      * @param srcImgPath      *            源图片路径      * @param targerPath      *            目标图片路径      * @param degree      *            水印图片旋转角度      * @param width      *            宽度(与左相比)      * @param height      *            高度(与顶相比)      * @param clarity      *            透明度(小于 的数)越接近 越透明      */     public static void waterMarkByText(String logoText String srcImgPath             String targerPath Integer degree Integer width Integer height             Float clarity) {         // 主图片的路径         InputStream is = null        OutputStream os = null        try {             Image srcImg = ImageIO read(new File(srcImgPath))            BufferedImage buffImg = new BufferedImage(srcImg getWidth(null)                     srcImg getHeight(null) BufferedImage TYPE_INT_RGB)            // 得到画笔对象             // Graphics g= buffImg getGraphics()            Graphics D g = buffImg createGraphics()            // 设置对线段的锯齿状边缘处理             g setRenderingHint(RenderingHints KEY_INTERPOLATION                     RenderingHints VALUE_INTERPOLATION_BILINEAR)            g drawImage(                     srcImg getScaledInstance(srcImg getWidth(null)                             srcImg getHeight(null) Image SCALE_SMOOTH)                     null)            if (null != degree) {                 // 设置水印旋转                 g rotate(Math toRadians(degree)                         (double) buffImg getWidth() /                         (double) buffImg getHeight() / )            }             // 设置颜色             g setColor(Color red)            // 设置 Font             g setFont(new Font("宋体" Font BOLD ))            float alpha = clarity            g setComposite(AlphaComposite getInstance(AlphaComposite SRC_ATOP                     alpha))            // 第一参数 >设置的内容 后面两个参数 >文字在图片上的坐标位置(x y)             g drawString(logoText width height)            g dispose()            os = new FileOutputStream(targerPath)            // 生成图片             ImageIO write(buffImg "JPG" os)            System out println("添加水印文字完成!")        } catch (Exception e) {             e printStackTrace()        } finally {             try {                 if (null != is)                     is close()            } catch (Exception e) {                 e printStackTrace()            }             try {                 if (null != os)                     os close()            } catch (Exception e) {                 e printStackTrace()            }         }     } }

还有一个图片缩放代码:

复制代码 代码如下: lishixinzhi/Article/program/Java/JSP/201311/20206

添加水印可以参考使用控件来添加的方法,如下:

1. 添加单个图片水印效果:

import com.spire.pdf.*

import java.awt.geom.Rectangle2D

public class watermark {

public static void main(String[] args) {

//加载PDF文档

PdfDocument doc = new PdfDocument()

doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.pdf")

//获取第一页

PdfPageBase page = doc.getPages().get(0)

//设置背景图片

page.setBackgroundImage("C:\\Users\\Administrator\\Desktop\\logo.png")

//设置背景区域

Rectangle2D.Float rect = new Rectangle2D.Float()

rect.setRect(280, 300, 150, 150)

page.setBackgroundRegion(rect)

//保存文档

doc.saveToFile("output/imageWaterMark.pdf")

doc.close()

}

}

2. 添加平铺图片水印效果

import com.spire.pdf.*

import com.spire.pdf.graphics.PdfImage

import com.spire.pdf.graphics.PdfTilingBrush

import java.awt.*

import java.awt.geom.Dimension2D

import java.awt.geom.Rectangle2D

public class AddBackground {

public static void main(String[] args) {

//创建PdfDocument对象,并加载PDF测试文档

PdfDocument pdf = new PdfDocument()

pdf.loadFromFile("test.pdf")

//遍历文档每一页,加载图片,并设置成平铺背景(水印)

for (int i = 0i <pdf.getPages().getCount()i++)

{

PdfPageBase page = pdf.getPages().get(i)

Dimension2D dimension2D = new Dimension()

dimension2D.setSize(page.getCanvas().getSize().getWidth()/4, page.getCanvas().getSize().getHeight()/3)

PdfTilingBrush brush = new PdfTilingBrush(dimension2D)

brush.getGraphics().setTransparency(0.2f)

     brush.getGraphics().translateTransform(brush.getSize().getWidth()/10,brush.getSize().getHeight()/10)

brush.getGraphics().rotateTransform(30)

PdfImage image = PdfImage.fromImage("logo.png")

brush.getGraphics().drawImage(image,brush.getSize().getWidth()-image.getWidth()/2,(brush.getSize().getHeight())/2)

Rectangle2D rectangle2D = new Rectangle2D.Float()

rectangle2D.setFrame(new Point(0,0),page.getCanvas().getClientSize())

page.getCanvas().drawRectangle(brush,rectangle2D)

}

//保存文档

pdf.saveToFile("SetTiledBackground.pdf")

pdf.dispose()

}

}

注:这里使用的是free Spire.Pdf.jar(以上代码参考自文章1、文章2)

文字水印

import java.awt.*

import java.awt.image.*

import java.io.*

import javax.swing.*

import com.sun.image.codec.jpeg.*

public class WaterSet {

/**

* 给图片添加水印

*

* @param filePath

*需要添加水印的图片的路径

* @param markContent

*水印的文字

* @param markContentColor

*水印文字的颜色

* @param qualNum

*图片质量

* @return

*/

public boolean createMark(String filePath, String markContent,

Color markContentColor, float qualNum) {

ImageIcon imgIcon = new ImageIcon(filePath)

Image theImg = imgIcon.getImage()

int width = theImg.getWidth(null)

int height = theImg.getHeight(null)

BufferedImage bimage = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB)

Graphics2D g = bimage.createGraphics()

g.setColor(markContentColor)

g.setBackground(Color.white)

g.drawImage(theImg, 0, 0, null)

g.drawString(markContent, width / 5, height / 5)// 添加水印的文字和设置水印文字出现的内容

g.dispose()

try {

FileOutputStream out = new FileOutputStream(filePath)

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)

JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage)

param.setQuality(qualNum, true)

encoder.encode(bimage, param)

out.close()

} catch (Exception e) {

return false

}

return true

}

}

图片水印

import java.awt.Color

import java.awt.Font

import java.awt.Graphics

import java.awt.Image

import java.awt.image.BufferedImage

import java.io.File

import java.io.FileOutputStream

import javax.imageio.ImageIO

import com.sun.image.codec.jpeg.JPEGCodec

import com.sun.image.codec.jpeg.JPEGImageEncoder

public final class ImageUtils {

public ImageUtils() {

}

/*

* public final static String getPressImgPath() { return ApplicationContext

* .getRealPath("/template/data/util/shuiyin.gif")}

*/

/**

* 把图片印刷到图片上

*

* @param pressImg --

*水印文件

* @param targetImg --

*目标文件

* @param x

*--x坐标

* @param y

*--y坐标

*/

public final static void pressImage(String pressImg, String targetImg,

int x, int y) {

try {

//目标文件

File _file = new File(targetImg)

Image src = ImageIO.read(_file)

int wideth = src.getWidth(null)

int height = src.getHeight(null)

BufferedImage image = new BufferedImage(wideth, height,

BufferedImage.TYPE_INT_RGB)

Graphics g = image.createGraphics()

g.drawImage(src, 0, 0, wideth, height, null)

//水印文件

File _filebiao = new File(pressImg)

Image src_biao = ImageIO.read(_filebiao)

int wideth_biao = src_biao.getWidth(null)

int height_biao = src_biao.getHeight(null)

g.drawImage(src_biao, (wideth - wideth_biao) / 2,

(height - height_biao) / 2, wideth_biao, height_biao, null)

//水印文件结束

g.dispose()

FileOutputStream out = new FileOutputStream(targetImg)

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)

encoder.encode(image)

out.close()

} catch (Exception e) {

e.printStackTrace()

}

}

/**

* 打印文字水印图片

*

* @param pressText

*--文字

* @param targetImg --

*目标图片

* @param fontName --

*字体名

* @param fontStyle --

*字体样式

* @param color --

*字体颜色

* @param fontSize --

*字体大小

* @param x --

*偏移量

* @param y

*/

public static void pressText(String pressText, String targetImg,

String fontName, int fontStyle, int color, int fontSize, int x,

int y) {

try {

File _file = new File(targetImg)

Image src = ImageIO.read(_file)

int wideth = src.getWidth(null)

int height = src.getHeight(null)

BufferedImage image = new BufferedImage(wideth, height,

BufferedImage.TYPE_INT_RGB)

Graphics g = image.createGraphics()

g.drawImage(src, 0, 0, wideth, height, null)

// String s="www.qhd.com.cn"

g.setColor(Color.RED)

g.setFont(new Font(fontName, fontStyle, fontSize))

g.drawString(pressText, wideth - fontSize - x, height - fontSize

/ 2 - y)

g.dispose()

FileOutputStream out = new FileOutputStream(targetImg)

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)

encoder.encode(image)

out.close()

} catch (Exception e) {

System.out.println(e)

}

}

public static void main(String[] args) {

pressImage("F:/logo.png", "F:/123.jpg", 0, 0)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11931756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存