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);
}
}
}
分享到:
相关推荐
易语言是一种专为初学者设计的编程语言,它采用了贴近自然语言的编程语法,使得编程过程更为简单易懂。在“易语言图片加水印”这个主题...通过不断地学习和实践,你可以使用易语言创建出功能更加强大的图片加水印工具。
开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我
按键精灵手机版IOS,图片加水印源码,可实现给图片加水印。把水印图片加到主图片里面。暂时只支持IOS系统。
总的来说,这个WinForm应用提供了一个方便的工具,可以对图片进行多种操作,如加水印(文字和图片)、等比例缩放和压缩,这对于日常需要处理图片的工作非常实用。通过理解并应用GDI+的图形处理技术,开发者可以...
易优批量图片加水印插件是一款针对易优CMS(EyouCMS)设计的专业插件,主要用于提升网站的用户体验和优化网页加载速度。在互联网环境中,网页加载速度是影响用户体验的关键因素之一,尤其是当页面中包含大量图片时,...
【图片加水印小工具绿色版】是一款便捷的软件,专为用户设计,用于在图片上添加水印,以保护版权或进行个性化定制。这款工具因其便携式特性,无需安装即可直接运行,大大简化了用户的操作流程。下面将详细介绍这款...
应为项目需要,给图片加图片水印,查阅了许多资料都不理想,最后使用ImageEN 5.2.0 FullSource控件解决,效果比较满意。 案例使用delphi7+ImageEN 5.2.0 FullSource制作,里面有ImageEN控件的安装方法。
3. 原图保留:除了加水印的图片外,组件还保留了原始上传的图片,用户可以根据需要选择查看原图或带有水印的图片。 4. AspJpeg组件:AspJpeg是一个常用的ASP图像处理库,用于读取、写入、修改和显示JPEG图像。在ASP...
在当今数字化的时代,图片的使用越来越普遍,而为了保护图片的版权和防止未经授权的使用,给图片加水印打码变得越来越重要。本文将介绍一款图片加水印打码工具以及在线加水印的HTML源码示例。 一、图片加水印打码...
VB(Visual Basic)是一种由微软开发的编程环境,它提供了简单易用的图形用户界面(GUI)创建工具和丰富的功能,使得创建给图片加水印的小程序变得容易。下面我们将深入探讨如何使用VB来实现这个功能,以及涉及到的...
在IT行业中,对图片进行版权保护或品牌宣传时,经常需要用到图片加水印的技术。"图片批量加水印软件 数字水印"是一款专为此目的设计的工具,它能够帮助用户快速、便捷地为大量图片添加数字水印,有效地防止图片被...
在提供的"水印的添加方法"文件中,可能包含了具体的PowerBuilder源代码示例,你可以参考该文件学习实际的编程实现细节。记得在编写代码时考虑错误处理,例如处理文件不存在或权限不足的情况。 总的来说,虽然Power...
易语言编程源码,大家可以参考学习
本文将详细介绍一款专业的图片批量加水印工具,探讨其功能、优势以及如何有效使用。 ## 水印的定义与作用 在开始讨论“图片批量加水印”工具之前,首先需要明确什么是水印以及其存在的意义。水印是一种将特定的...
在IT领域,图片加水印是一项常见的图像处理任务,它涉及到图像处理技术、软件开发以及版权保护等多个方面。...通过学习和掌握这些技能,不仅可以开发出实用的图片加水印工具,还能进一步扩展到其他图像编辑和处理应用。
本项目以C#编程语言为基础,提供了批量添加水印的功能,无论是文字水印还是图片水印,都可以轻松实现。下面我们将详细探讨这个主题。 首先,让我们理解“水印”的概念。水印是图像处理中的一个术语,指的是在原始...
"给图片加水印 批量给图片加水印"这个主题涉及到图像处理技术,特别是批量处理方面,这对于摄影师、设计师或者内容创作者来说非常重要。下面我们将详细探讨如何实现这一功能,以及涉及到的相关技术。 首先,我们要...
QT给图片加水印是一种常见的图像处理操作,用于在图片上添加标识或版权信息,防止未经授权的使用。本文将深入探讨如何使用Qt框架实现这一功能,包括必要的编程知识和步骤。 首先,Qt是一个跨平台的应用程序开发框架...
标签“给图片加水印”、“水印”和“加水印”进一步确认了我们讨论的核心内容。 在给图片加水印的过程中,通常涉及以下关键技术点: 1. 图像处理库:实现这一功能首先需要一个图像处理库,如Python中的Pillow库,...
批量给图片加水印就是其中一种高效的工作方式,它可以确保您的原创作品得到保护,防止被他人盗用。以下是一些关于“批量给图片加水印”的关键知识点: 1. **水印**:水印是一种视觉标记,通常用于在图像上添加版权...