package com.linktel.graphics;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Component.BaselineResizeBehavior;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.PixelGrabber;
import java.awt.image.renderable.ParameterBlock;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.media.jai.JAI;
import sun.awt.image.ImageDecoder;
import com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet;
import com.sun.media.imageio.plugins.tiff.TIFFTag;
import com.sun.media.imageio.plugins.tiff.TIFFTagSet;
import com.sun.media.jai.codec.*;
import com.sun.media.jai.codecimpl.TIFFCodec;
import com.sun.media.jai.codecimpl.TIFFImage;
import com.sun.media.jai.codecimpl.TIFFImageDecoder;
public class GraphicFax {
private static final int DEFAULT_HEIGHT = 0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GraphicFax graphicFax=new GraphicFax();
graphicFax.pressImage( "E:/技术文档/target.jpg", "E:/技术文档/a.tif", null, 800, 700, 122,122, 0.5f, 50);
}
/**
* 查询某个区域的平均灰度
* @param width
* @param height
* @param pixels
* @return
*/
private float getAverageGrap(int width,int height,int[] pixels){
/* 下面是开始算这个区域的亮度了,灰度等同于亮度 */
ColorModel colorModel = ColorModel.getRGBdefault();
int i = 0;
int j = 0;
int k = 0;
int r = 0;
int g = 0;
int b = 0;
int gray = 0;
float average = 0;// 平均灰度
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
// 定位像素点
k = i * width + j;
r = colorModel.getRed(pixels[k]);
g = colorModel.getGreen(pixels[k]);
b = colorModel.getBlue(pixels[k]);
// 计算灰度值
gray = (r * 38 + g * 75 + b * 15) >> 7;
average = average + gray;
}
}
// 计算平均灰度
average = average / ((i - 1) * (j - 1));
return average;
}
/**
* 将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。超过范围,按默认值进行。
*/
public final void pressImage(
String darknessWaterImg, String targetImg,String nowTargetImg, int startX, int startY,
int x, int y, float alpha, float averageGray) {
try {
System.out.println("GraphicFax pressImage() lightnessWaterImg:");
System.out.println("GraphicFax pressImage() darknessWaterImg:"+darknessWaterImg);
System.out.println("GraphicFax pressImage() targetImg:"+targetImg);
// 先判断亮水印和源文件的值是否为null,否则抛出异常
if ( targetImg == null || targetImg == "") {
throw new Exception("亮水印或者源图片的地址不能为空");
}
// 再判断平均灰度边界是否越界
BufferedImage src;
// 装载源图片
// 图片装入内存
src= ImageIO.read(new File("f:/images/03.tif"));
// 获取图片的尺寸
int width = src.getWidth(null);
int height = src.getHeight(null);
// 根据源图片尺寸,设置预装载的一个图片,默认是RGB格式的
byte[] arr = {(byte)0xff, (byte)0x0};
IndexColorModel newCM = new IndexColorModel(1, 2, arr, arr, arr);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_BYTE_BINARY,newCM);
Graphics2D graphics = image.createGraphics();
// 绘制内存中的源图片至指定的矩形内
System.out.println("Graphics the image ");
graphics.drawImage(src, 0, 0, width, height, null);
// 在已经绘制的图片中加入透明度通道
graphics.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_ATOP, alpha));
// 获取源图片中和设定的同样大小的区域内的像素集合
int[] pixels = getPixArray(src, startX, startY, x, y);
System.out.println("get the PixArray ");
System.out.println(targetImg);
//查询此集合的平均灰度
//装载水印图片所需参数
File water;
BufferedImage bufferwater;
// 根据设定的平均灰度边界来装载不同的水印
// 装载亮水印文件
water = new File(darknessWaterImg);
// 装入内存
bufferwater = ImageIO.read(water);
graphics.drawImage(bufferwater, startX, startY, x, y, null);
// 水印文件结束
// BaselineTIFFTagSet baseT=BaselineTIFFTagSet.getInstance();
// TIFFTag tagXRes = baseT.getTag(BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO);
//
// ParameterBlock paramBlock;
// paramBlock = new ParameterBlock();
// paramBlock.addSource( image );
//
// RenderingHints hints = new RenderingHints( JAI.KEY_TRANSFORM_ON_COLORMAP,
// Boolean.TRUE );
graphics.dispose();
FileOutputStream out = new FileOutputStream("f:/images/aa.tif");
TIFFEncodeParam param = new TIFFEncodeParam();
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP3_2D);
// The code below will give u a 200 dpi x res and a 200 dpi y res
// 282 = X Res
// 283 = Y Res
// 296 = Res Unit
// 262 = Photometric Interpertation 0 = WhiteIsZero, 1 = BlackIsZero
// 266 = FillOrder
// 277 = SamplesPerPixel
// 259 = Compression
// TIFFField[] extras = new TIFFField[8];
// extras[0] = new TIFFField(282, TIFFField.TIFF_RATIONAL, 1, (Object) new long[][] { {(long) 204, (long) 1 }, { (long) 0, (long) 0 } });
// extras[1] = new TIFFField(283, TIFFField.TIFF_RATIONAL, 1, (Object) new long[][] { {(long) 196, (long) 1 }, { (long) 0, (long) 0 } });
// extras[2] = new TIFFField(296, TIFFField.TIFF_SHORT, 1, (Object) new char[] { 2 });
// extras[3] = new TIFFField(262, TIFFField.TIFF_SHORT, 1, (Object) new char[] { 0 });
// extras[4] = new TIFFFie
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
readPagesTiff.rar (28个子文件)
readPagesTiff
.project 389B
bin
com
linktel
graphics
GraphicFax.class 5KB
readTiff
PagesTiff.class 3KB
merge
Merger.class 5KB
rotateAndResizeImage
RtAndRs.class 2KB
CompressPicture
CompressImage.class 4KB
convertTifAndPng
ConvertTifAndPng.class 4KB
ConvertPdfAndTif
PdfToTiff.class 310B
PDFWriter.class 934B
Test
Test.class 1KB
.settings
org.eclipse.ltk.core.refactoring.prefs 137B
hs_err_pid3336.log 8KB
src
com
linktel
graphics
GraphicFax.java 11KB
readTiff
PagesTiff.java 4KB
merge
Merger.java 5KB
rotateAndResizeImage
RtAndRs.java 3KB
CompressPicture
CompressImage.java 5KB
convertTifAndPng
ConvertTifAndPng.java 5KB
ConvertPdfAndTif
PDFWriter.java 3KB
PdfToTiff.java 2KB
Test
Test.java 2KB
.classpath 411B
abatorConfig.xml 792B
lib
jai_core.jar 1.81MB
jai_imageio-1.1-alpha.jar 729KB
jai_codec.jar 252KB
iText-2.1.5.jar 1.07MB
hs_err_pid3560.log 8KB
共 28 条
- 1
zqcmjnj
- 粉丝: 11
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页