base64字符串加水印
来源:互联网 发布:中国调查数据网 编辑:程序博客网 时间:2024/06/04 23:20
- package test;
- /**
- * 处理水印类
- */
- import java.awt.AlphaComposite;
- import java.awt.Color;
- import java.awt.Graphics2D;
- import java.awt.geom.AffineTransform;
- import java.awt.image.AffineTransformOp;
- import java.awt.image.BufferedImage;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.imageio.ImageIO;
- import sun.misc.BASE64Decoder;
- import sun.misc.BASE64Encoder;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- public final class ImageUtils {
- private static BASE64Encoder base64en = new BASE64Encoder();
- private static BASE64Decoder base64de = new BASE64Decoder();
- //水印图片base64码
- private static String shuiyingImg = "水印的base64字符串!"
- /**
- * 根据base64码加上水印后返回新的base64码
- * @param srcStr 照片base64字符串
- * @return
- */
- public final static String addWatermark(String srcStr) throws IOException,Exception{
- //根据传递的base64图片的大小来决定水印图片的大小。
- //处理透明信息
- float alpha = 0.3F;
- int srcWidth = 0;
- int srcHeight = 0;
- byte[] b ;
- try {
- b = base64de.decodeBuffer(srcStr);
- InputStream is = new java.io.ByteArrayInputStream(b);
- BufferedImage src = ImageIO.read(is);
- if(src != null ){
- srcWidth = src.getWidth(null);
- srcHeight = src.getHeight(null);
- if(srcWidth<=0||srcHeight<=0)
- return null;
- //根据原始图片变换水印图片的尺寸
- BufferedImage waterMark = resize(shuiyingImg,srcWidth,srcHeight);
- /*添加水印*/
- BufferedImage img = new java.awt.image.BufferedImage(srcWidth, srcHeight,BufferedImage.TYPE_USHORT_565_RGB);
- //创建画板
- Graphics2D graph = img.createGraphics();
- //把原图印到图板上
- graph.drawImage(src,null,0,0);
- //设置透明度,alpha
- graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
- //画水印图片
- graph.drawImage(waterMark,null,0,0);
- /*把图片转换为字节*/
- ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
- encoder.encode(img);
- byte[] resultByte = jpegOutputStream.toByteArray();
- //ImageIO.write(img, "jpg",new File("d://wave.jpg"));
- //System.out.println("加水印完成");
- graph.dispose();
- //System.out.println(base64en.encode(resultByte));
- return base64en.encode(resultByte);
- }else{
- return null;
- }
- }catch (IOException e) {
- return null;
- }
- catch (Exception e) {
- return null;
- }
- }
- /**
- * 根据图片大小,自动变化水印图片大小。
- * @param src:
- * @param w:原图片宽度
- * @param h:元图片高度
- * @return:返回image
- */
- public static BufferedImage resize(String src,int w,int h) {
- byte[] b;
- // 加载内存中的水印图片
- try {
- b = base64de.decodeBuffer(src);
- InputStream is = new java.io.ByteArrayInputStream(b);
- BufferedImage img = ImageIO.read(is);
- // 获得适合的缩放比率,即以在规定缩略尺寸中完整显示图片内容的同时又保证最大的缩放比率
- // 根据比例画出缓存图像
- BufferedImage mini = new java.awt.image.BufferedImage(w, h,BufferedImage.TYPE_USHORT_565_RGB);
- Graphics2D gmini = mini.createGraphics();
- gmini.setBackground(Color.WHITE);
- // 让生成的图片按相同的比例变换
- gmini.clearRect(0, 0, w, h);
- AffineTransform trans = new AffineTransform();
- // 长和宽同时变换
- trans.scale((double) w / img.getWidth(), (double) h/ img.getHeight());
- gmini.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.7f));
- AffineTransformOp op = new AffineTransformOp(trans,AffineTransformOp.TYPE_BILINEAR);
- gmini.drawImage(img, op, 0, 0);
- gmini.dispose();
- return mini;
- } catch (IOException e) {
- return null;
- }
- }
- public static void main(String[] args) {
- String imgFile = "d://heart.jpg";//待处理的图片
- InputStream in = null;
- byte[] data = null;
- //读取图片字节数组
- try{
- in = new FileInputStream(imgFile);
- data = new byte[in.available()];
- in.read(data);
- in.close();
- }catch (IOException e){
- e.printStackTrace();
- }
- //对字节数组Base64编码
- BASE64Encoder encoder = new BASE64Encoder();
- try {
- ImageUtils.addWatermark(encoder.encode(data));
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
阅读全文
0 0
- base64字符串加水印
- base64字符串加水印
- JAVA实现图片加水印及Base64图片字符串加水印
- 加水印
- 加水印
- Linux下用base64命令加解密字符串
- DES,RSA加解密,base64格式字符串转换,字典排序
- Base64 解密,加密文件或者字符串 [本人加了字符串加解密]
- PHP 加水印
- 上传加水印
- jsp加图片水印
- 图片加水印类
- 图片加水印
- 生成缩略图加水印
- 图片加水印类
- ASP图片加水印
- 图片加水印
- 给图片加水印
- MMC 卡驱动分析
- Java基础知识梳理--泛型
- Python10--面向对象
- 数组
- POJ
- base64字符串加水印
- Mock测试是什么
- pl011_init
- 51nod 1397
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
- 常见的HTTP状态码详解
- Linux几个命令
- Java基础知识梳理--注解
- 第二章 SQL命令参考- VACUUM