base64字串加浮水印

來源:互聯網
上載者:User

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(); } } }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.