㈠ java实现在同一张图片上面绘制多个不同位置的水印
Graphics2D g = buffImg.createGraphics();
// 3、设置对线段的锯齿状边缘处理
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);
// 5、设置水印文字颜色
g.setColor(color);
// 6、设置水印文字Font
g.setFont(font);
// 7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
g.drawString(logoText, positionX, PositionY);
// 9、释放资源
g.dispose();,
你这里每一次都重新绘制了图片,把之前绘制的部分覆盖了
㈡ java 如何给pdf文件加水印
Java生成PDF 加密 水印
1、iText简介
iText是一个开放源码的Java类库,可以用来方便地生成PDF文件。大家通过访问http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948
下载最新版本的类库,下载完成之后会得到一个.jar包,把这个包加入JDK的classpath即可使用。
如果生成的PDF文件中需要出现中文、日文、韩文字符,则还需要通过访问http://itext.sourceforge.net/downloads/iTextAsian.jar
下载iTextAsian.jar包。
关于iText类库的使用,http://www.lowagie.com/iText/tutorial/index.html
有比较详细的教程。该教程从入门开始,比较系统地介绍了在PDF文件中放入文字、图片、表格等的方法和技巧。
读完这片教程,大致就可以做一些从简单到复杂的PDF文件了。不过,试图通过教程解决在生成PDF文件过程中遇到的所有困难无疑是一种奢望。所以,阅读iText的api文档显得非常重要。读者在下载类库的同时,也可以下载类库的文档。
注:如果以上两个下载链接无法下载而且通过网络也找不到这个jar包的同志可以留下邮箱地址,我会在两个工作日之内发邮件过去。
以下部分我是我调试通过的源代码,提供大家参考:
import java.awt.*;
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import
com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.*;
/**
* 最近的项目中使用Itext将txt文件转换为PDF文件, 并且实现对文件的一些权限控制。
现实对pdf文件加
*密,添加水印等。
*/
public class PDFConvertBL
{
//
txt原始文件的路径
private static final String txtFilePath = "d:/11.txt";
// 生成的pdf文件路径
private static final String pdfFilePath =
"d:/22.pdf";
// 添加水印图片路径
// private static final String
imageFilePath = "D:/33.jpg";
// 生成临时文件前缀
private static final
String prefix = "tempFile";
// 所有者密码
private static final String
OWNERPASSWORD = "12345678";
/**
* txt文件转换为pdf文件
*
* @param txtFile
txt文件路径
* @param pdfFile pdf文件路径
* @param userPassWord
用户密码
* @param waterMarkName 水印内容
* @param permission
操作权限
*/
public static void generatePDFWithTxt(String txtFile,
String pdfFile, String userPassWord, String
waterMarkName,
int permission)
{
try
{
// 生成临时文件
File file =
File.createTempFile(prefix, ".pdf");
//
创建pdf文件到临时文件
if (createPDFFile(txtFile, file))
{
// 增加水印和加密
waterMark(file.getPath(),
pdfFile, userPassWord, OWNERPASSWORD, waterMarkName, permission);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 创建PDF文档
*
* @param txtFilePath
txt文件路径(源文件)
* @param pdfFilePath pdf文件路径(新文件)
*/
private
static boolean createPDFFile(String txtFilePath, File file)
{
// 设置纸张
Rectangle rect = new Rectangle(PageSize.A4);
//
设置页码
HeaderFooter footer = new HeaderFooter(new Phrase("页码:",
setChineseFont()), true);
footer.setBorder(Rectangle.NO_BORDER);
// step1
Document
doc = new Document(rect, 50, 50, 50, 50);
doc.setFooter(footer);
try
{
FileReader
fileRead = new FileReader(txtFilePath);
BufferedReader read = new
BufferedReader(fileRead);
// 设置pdf文件生成路径 step2
PdfWriter.getInstance(doc, new FileOutputStream(file));
//
打开pdf文件 step3
doc.open();
// 实例化Paragraph
获取写入pdf文件的内容,调用支持中文的方法. step4
while (read.ready())
{
// 添加内容到pdf(这里将会按照txt文件的原始样式输出)
doc.add(new Paragraph(read.readLine(), setChineseFont()));
}
// 关闭pdf文件 step5
doc.close();
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
/**
* 在pdf文件中添加水印
*
* @param inputFile
原始文件
* @param outputFile 水印输出文件
* @param waterMarkName
水印名字
*/
private static void waterMark(String inputFile, String
outputFile, String userPassWord, String ownerPassWord,
String waterMarkName, int permission)
{
try
{
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new
FileOutputStream(outputFile));
// 设置密码
stamper.setEncryption(userPassWord.getBytes(), ownerPassWord.getBytes(),
permission, false);
BaseFont base =
BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
int total = reader.getNumberOfPages() +
1;
// Image image =
Image.getInstance(imageFilePath);
//
image.setAbsolutePosition(200, 400);
PdfContentByte
under;
int j = waterMarkName.length();
char c =
0;
int rise = 0;
for (int i = 1; i < total;
i++)
{
rise = 500;
under =
stamper.getUnderContent(i);
// 添加图片
//
under.addImage(image);
under.beginText();
under.setColorFill(Color.CYAN);
under.setFontAndSize(base,
30);
// 设置水印文字字体倾斜 开始
if (j >=
15)
{
under.setTextMatrix(200,
120);
for (int k = 0; k < j;
k++)
{
under.setTextRise(rise);
c =
waterMarkName.charAt(k);
under.showText(c +
"");
rise -= 20;
}
}
else
{
under.setTextMatrix(180, 100);
for (int k = 0; k < j; k++)
{
under.setTextRise(rise);
c = waterMarkName.charAt(k);
under.showText(c +
"");
rise -= 18;
}
}
// 字体设置结束
under.endText();
// 画一个圆
//
under.ellipse(250, 450, 350, 550);
//
under.setLineWidth(1f);
// under.stroke();
}
stamper.close();
}
catch (Exception
e)
{
e.printStackTrace();
}
}
/**
* 设置中文
*
* @return Font
*/
private static Font setChineseFont()
{
BaseFont base =
null;
Font fontChinese = null;
try
{
base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.EMBEDDED);
fontChinese = new Font(base, 12,
Font.NORMAL);
}
catch (DocumentException e)
{
e.printStackTrace();
}
catch (IOException
e)
{
e.printStackTrace();
}
return fontChinese;
}
public static void main(String[] args)
{
generatePDFWithTxt(txtFilePath, pdfFilePath, "123", "水印文字", 16);
}
}
文章参考一些网络博客稍加修改调试,特此申明
http://hi..com/sx_python/item/15081531ad7d1bc21b96965e
㈢ Java上传图片到OSS怎么添加水印
首先,图片上的水印图片只能使用当前存储空间内的图片,如果没有,需要先传到当前空间内。
其次,水印图片的格式仅支持png,jpg,webp三种。
java里面上传水印,可以使用提供的sdk里面的watermark方法,这个函数有5个参数,分别是t,g,x,y,voffset.其中第一个参数表示透明度,其它参数表示位置。
当然了,它还可以指定水印文字,具体可以参考阿里云官方提供的文档,代码示例可以去github上找到对应操作的代码。
具体代码如下
// add watermark into the image
style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
request = new GetObjectRequest(bucketName, key);
request.setProcess(style);
㈣ java(最好jsp)给图片加水印
Java给图片加水印
/**
* 方法描述:<b>给图片增加水印.</b></br>
* 备 注: 在图片上写字符串
* 创 建 人: bo.gaobo</br>
* 创建日期: 2012-09-07</br>
* @param originalUrl 原始图片存储路径
* @param oldImg 原图片
* @param str 增加的字符串
* @param xLocation x坐标
* @param yLocation y坐标
* @param fontColor 颜色
* @param fontSize 字号
* @param typeFace 字体
* @param fileType 文件类型
*/
public static BufferedImage addStringToImg(String originalUrl, BufferedImage oldImg,String str,int xLocation,int yLocation, Color fontColor, int fontSize, String typeFace, String fileType) throws IOException{
FileOutputStream output = new FileOutputStream(originalUrl);
BufferedImage buffImg = oldImg;
Graphics2D g = buffImg.createGraphics();
g = buffImg.createGraphics();
g.drawImage(buffImg, null, 0, 0);
g.setColor(fontColor); //设置字体颜色
g.setFont(new Font(typeFace, Font.PLAIN, fontSize)); //设置字体和字号
g.drawString(str, xLocation, yLocation); //把字符串放在对应的坐标处
g.dispose();
ImageIO.write(buffImg, fileType, output); //设置文件类型
output.close();
return buffImg;
}
㈤ java中怎么样将水印加在图片的上面或者下面
去我的博客,java加水印完全示范
http://hi..com/paladian1/blog/item/a243b30ea5ec95236059f354.html
㈥ 用java给图片加水印的问题
很明显是你自己在图片加水印时没有任何限制的加水印
一般情况下,加一次,然后记住本次操作,用数据库或者什么其他的,下次访问该图片时,就不要再加了。
你给它穿了n多的衣服它不变色才怪
㈦ java 照片加水印 技术有哪些
首先。涉及到文件就要用到文件操作,但我们这是操作图片
1、我们首先需要一个容器来存放图片ps:图片原来在磁盘(File)—-》内存(image)
2、我们要在原来的图片上加水印,就相当于要在纸上画画。。。所以我们的画纸应该是原图的一的副本,我们我们需要得到副本并用容器容乃他,
3、画画需要画笔对吧,我们要得到画副本的笔,当然比肯定有粗细。。。参数设置。。
4、如果就开始画了。。。首先的找位置。。。我们的图片就像桌面是二维图形,就用起始坐标,还是按部就班就从(0,0)开始呢
5、然后万一我们想歇着画了呢,java有旋转画布的方法
6、开始画画了。。。。给定位置。。。给定内容。。下笔了。。。
7、花完了。。是不是就要收拾现场了。。。。收拾好笔,将内存的image输出到磁盘文件。。。。
上代码
㈧ java给tif格式图片加文字水印
packagecom.coderli.image;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.FileOutputStream;
importjavax.imageio.ImageIO;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("restriction")
publicfinalclassImageUtils{
publicImageUtils(){
}
/**
*打印文字水印图片
*
*@parampressText
*--文字
*@paramtargetImg--
*目标图片
*@paramfontName--
*字体名
*@paramfontStyle--
*字体样式
*@paramcolor--
*字体颜色
*@paramfontSize--
*字体大小
*@paramx--
*偏移量
*@paramy
*/
publicstaticvoidpressText(StringpressText,StringtargetImg,
StringfontName,intfontStyle,Colorcolor,intfontSize,intx,
inty){
try{
File_file=newFile(targetImg);
Imagesrc=ImageIO.read(_file);
intwidth=src.getWidth(null);
intheight=src.getHeight(null);
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphicsg=image.createGraphics();
g.drawImage(src,0,0,width,height,null);
g.setColor(color);
g.setFont(newFont(fontName,fontStyle,fontSize));
g.drawString(pressText,width-fontSize-x,height-fontSize
/2-y);
g.dispose();
FileOutputStreamout=newFileOutputStream(targetImg);
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}catch(Exceptione){
System.out.println(e);
}
}
publicstaticvoidmain(String[]args){
pressText("bbs.coderli.com","f:/1.tiff","TimesNewRomas",Font.PLAIN,Color.BLUE,22,150,20);
}
}
这个方法里用的api是支持tiff格式的,你可以试试。
㈨ java图片加水印代码 最好有实例!!!先谢了!!
文字水印
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);
}
}