import java.io.OutputStream;
/**
*
* @接口
*/
public interface IImageWatermark {
void watermark();
void setOutputStream(OutputStream out);
}
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/**
*
* @author Administrator
* LOGO水印
*/
public class IconImageWatermark implements IImageWatermark {
private Integer degree;
private Image image;
private ImageIcon icon;
private float alpha=1f;
private OutputStream out;
public IconImageWatermark(Image image, ImageIcon icon) {
this(image, icon, null,1f);
}
public IconImageWatermark(Image image, ImageIcon icon, Integer degree,float alpha) {
this.image = image;
this.icon = icon;
this.degree = degree;
this.alpha=alpha;
}
@Override
public void watermark() {
if (this.image == null) {
throw new NullPointerException("image is null");
}
if (this.icon == null) {
throw new NullPointerException("icon is null");
}
int width=this.image.getWidth(null);
int height=this.image.getHeight(null);
//创建访问图像数据缓冲区
BufferedImage buffer=new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);
//创建一个 Graphics2D 图表
Graphics2D grap=buffer.createGraphics();
// 设置对线段的锯齿状边缘处理
grap.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//绘制指定图像
grap.drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
//设置水印旋转
if(degree!=null){
grap.rotate(Math.toRadians(degree), Double.valueOf(width/2),Double.valueOf(height/2));
}
//组合绘图,并设定透明
grap.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,this.alpha));
//绘制一个水印
int x=(width-icon.getImage().getWidth(null))/2;
int y=(height-10)-icon.getImage().getHeight(null);
grap.drawImage(icon.getImage(),x,y, null);
//组合结束
grap.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
//释放此图形的上下文以及它使用的所有系统资源
grap.dispose();
try {
ImageIO.write(buffer, "JPG", out);
} catch (IOException ex) {
Logger.getLogger(IconImageWatermark.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void setOutputStream(OutputStream out) {
this.out = out;
}
public float getAlpha() {
return alpha;
}
public void setAlpha(float alpha) {
this.alpha = alpha;
}
public Integer getDegree() {
return degree;
}
public void setDegree(Integer degree) {
this.degree = degree;
}
}
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
/**
*
* @author Administrator
*/
public class StringImageWatermark implements IImageWatermark {
private Image image;
private String water;
private Integer degree;
private float alpha;
private OutputStream os;
public StringImageWatermark(Image image, String water) {
this(image, water, null, 1f);
}
public StringImageWatermark(Image image, String water, Integer degree, float alpha) {
this.image = image;
this.water = water;
this.degree = degree;
this.alpha = alpha;
}
@Override
public void watermark() {
if(image==null){
throw new NullPointerException("image is null");
}
int width=image.getWidth(null);
int height=image.getHeight(null);
BufferedImage buffered=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D graph=buffered.createGraphics();
graph.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graph.drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0,0, null);
if(degree!=null){
graph.rotate(degree, Double.valueOf(width/2),Double.valueOf(height/2));
}
graph.setColor(Color.RED);
graph.setFont(new Font("宋体",Font.BOLD,30));
graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
int x= (width-water.length()*30)/2;
int y=height-30;
graph.drawString(water,x,y);
// graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
graph.dispose();
try {
ImageIO.write(buffered, "jpg", os);
} catch (IOException ex) {
Logger.getLogger(StringImageWatermark.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void setOutputStream(OutputStream out) {
this.os=out;
}
public float getAlpha() {
return alpha;
}
public void setAlpha(float alpha) {
this.alpha = alpha;
}
public Integer getDegree() {
return degree;
}
public void setDegree(Integer degree) {
this.degree = degree;
}
}
import java.io.IOException;
import java.io.OutputStream;
/**
*
* @author Administrator
*/
public class WatermarkContext {
private IImageWatermark iImageWatermark;
public WatermarkContext(IImageWatermark iImageWatermark) {
this.iImageWatermark = iImageWatermark;
}
public void watermark(OutputStream out) {
this.iImageWatermark.setOutputStream(out);
this.iImageWatermark.watermark();
if(out!=null){
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/**
*
* @author Administrator
*/
public class Test {
public static void main(String... args) {
try {
OutputStream os = new FileOutputStream("d:\\img_mark_icon.jpg");
OutputStream sos = new FileOutputStream("d:\\img_mark_string.jpg");
IconImageWatermark iiw=new IconImageWatermark(ImageIO.read(new File("d:\\img.jpg")), new ImageIcon("d:\\logo.jpg"));
iiw.setAlpha(0.5f);
// iiw.setDegree(-40);
WatermarkContext context=new WatermarkContext(iiw);
context.watermark(os);
StringImageWatermark siw=new StringImageWatermark(ImageIO.read(new File("d:\\img.jpg")), "襄樊诚作房地产评估有限公司");
siw.setAlpha(0.5f);
WatermarkContext scontext=new WatermarkContext(siw);
scontext.watermark(sos);
} catch (Exception ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
分享到:
相关推荐
易语言图片加水印源码,图片加水印,位图水印
自己开发的处理图片 压缩 等比例缩放 加水印文字 加水印图片 自定义加水印的位置。很不错的哦,需要本机有.net framework4.0环境支持。平时有时候需要用到图片的处理这个就不错。
开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我
按键精灵手机版IOS,图片加水印源码,可实现给图片加水印。把水印图片加到主图片里面。暂时只支持IOS系统。
图片加水印小工具绿色版图片加水印小工具绿色版图片加水印小工具绿色版图片加水印小工具绿色版图片加水印小工具绿色版
html2canvas 网页对图片加水印
Flex_给图片加水印,Flex_给图片加水印。Flex_给图片加水印
asp 图片上传加水印功能的案例 源码名称:上传图片加水印功能 说明:空间必须支持:AspJpeg组件。。现在的空间基本都支持.
应为项目需要,给图片加图片水印,查阅了许多资料都不理想,最后使用ImageEN 5.2.0 FullSource控件解决,效果比较满意。 案例使用delphi7+ImageEN 5.2.0 FullSource制作,里面有ImageEN控件的安装方法。
上传组件,支持上传之后保留原图和加水印的图片 空间必须支持:AspJpeg组件.
图片加数字水印工具 图片批量加水印软件 数字水印 一键设置,轻松批量加水印
在线图片加水印,canvas加水印,在线给图片加水印、照片上添加文字,通过前端canvas给你的证件加上水印,防止证件被盗。 演示地址:http://watermark.dxcweb.com/
1.VB写的小程序给图片增加水印,默认把图片拍摄日期作为水印;
js 图片加水印 h5 canvas实现,替换代码中的图片为自己的图片位置即可运行 chrome测试通过
图片加水印 java代码实现
给图片添加水印 很多网站要的图片有都带有水印,这一有个例子大家可看参考一下
java实现图片加水印 工具类!!!以后不用手动敲代码了
可经批量给图片加水印 方便,快捷,易操作
图片加水印工具是一款给图象加水印的工具。通过它,我们可以快速、准确、方便、添加自定的标识到图片上。 加注水印后的数码照片、产品展示图片可以最大限度防止被他人盗用、滥用,同时又起到了标识图片的作用,给...
这是我觉得最简单的一个给图片加水印的方法,希望能帮到大家提供工作效率。 备注:需安装图片水印处理软件,只有安装了该组件 才支持Jpeg里面的方法