根据明暗度分别加不同的水印
Java代码
package image;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
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 class WaterMark {
/**
* 获取指定矩形中的像素的矩阵
*
* @param imageSrc
* @param startX
* @param startY
* @param w
* @param h
* @return
*/
private int[] getPixArray(Image imageSrc, int startX, int startY,
int w, int h) {
int[] pix = new int[(w - startX) * (h - startY)];
/*下面是别人程序中的一段,我实在不明白为何要加这一段,因为我去掉也没有问题,加上还会报错*/
PixelGrabber pg = null;
try {
pg = new PixelGrabber(imageSrc, startX, startY, w-startX, h-startY, pix, 0, w);
if (pg.grabPixels() != true) {
try {
throw new java.awt.AWTException("pg error" + pg.status());
} catch (Exception eq) {
eq.printStackTrace();
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return pix;
}
/**
* 将1张图片和另1张图片的指定区域重合。可用于制作水印。图片的左上角坐标为0,0
*
* @param lightnessWaterImg
* 颜色比较亮的水印图片,适合底色比较暗的情况
* @param darknessWaterImg
* 颜色比较暗的水印图片,适合底色比较亮的情况,如果不想区分,则输入null,平均灰度边界同时失效。
* @param targetImg
* 源图片
* @param startX
* @param startY
* @param x
* @param y
* @param alpha
* 透明度,0f为全透明,1f为完全不透明,0.5f为半透明
* @param averageGray
* 平均灰度边界(0-255),大于此值,则打暗的水印图片,小于此值则打亮的水印图片。
* 默认值128。超过范围,按默认值进行。
*/
private final void pressImage(String lightnessWaterImg,
String darknessWaterImg, String targetImg, int startX, int startY,
int x, int y, float alpha, float averageGray) {
try {
// 先判断亮水印和源文件的值是否为null,否则抛出异常
if (lightnessWaterImg == null || lightnessWaterImg == ""
|| targetImg == null || targetImg == "") {
throw new Exception("亮水印或者源图片的地址不能为空");
}
// 再判断平均灰度边界是否越界
if (averageGray>255||averageGray<0) {
averageGray = 128;
}
// 装载源图片
File _file = new File(targetImg);
// 图片装入内存
BufferedImage src = ImageIO.read(_file);
// 获取图片的尺寸
int width = src.getWidth(null);
int height = src.getHeight(null);
// 根据源图片尺寸,设置预装载的一个图片,默认是RGB格式的
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
// 绘制内存中的源图片至指定的矩形内
graphics.drawImage(src, 0, 0, width, height, null);
// 在已经绘制的图片中加入透明度通道
graphics.setComposite(AlphaComposite.getInstance(
&nb
补充:软件开发 , Java ,