Java 背景图片拼接 根据内容生成的二维码
来源:互联网 发布:php foreach 编辑:程序博客网 时间:2024/06/10 12:08
Java 图片拼接根据内容生成的二维码 直接上代码:此类可作为工具类 自己琢磨自学 不喜请喷。
此为Java web项目 在pom.xml文件添加:(谷歌官方API 可以百度搜索 下载Jar 包)
<!-- 图片组合二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.1.0</version>
</dependency>
public class ImageAndQRcode {
private staticfinalint BLACK = 0xFF000000;
private staticfinalint WHITE = 0xFFFFFFFF;
ImageAndQRcode() {
}
private static BufferedImage toBufferedImage(BitMatrixmatrix) {
int width =matrix.getWidth();
int height =matrix.getHeight();
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
for (intx = 0;x < width; x++) {
for (inty = 0;y < height;y++) {
image.setRGB(x,y,matrix.get(x,y) ?BLACK :WHITE);
}
}
return image;
}
private staticvoid writeToFile(BitMatrixmatrix, String format, Filefile)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image,format,file)) {
thrownew IOException("Could not write an image of format "
+ format + " to " + file);
}
}
/**
* @Title: 构造图片
* @Description: 生成水印并返回java.awt.image.BufferedImage
* @param file源文件(图片)
* @param waterFile水印文件(图片)
* @param x距离右下角的X偏移量
* @param y 距离右下角的Y偏移量
* @param alpha 透明度, 选择值从0.0~1.0: 完全透明~完全不透明
* @return BufferedImage
* @throws IOException
*/
private static BufferedImage watermark(Filefile, FilewaterFile,intx, int y, floatalpha)throws IOException {
// 获取底图
BufferedImage buffImg = ImageIO.read(file);
// 获取层图
BufferedImage waterImg = ImageIO.read(waterFile);
// 创建Graphics2D对象,用在底图对象上绘图
Graphics2D g2d = buffImg.createGraphics();
int waterImgWidth =waterImg.getWidth();// 获取层图的宽度
int waterImgHeight =waterImg.getHeight();// 获取层图的高度
// 在图形和图像中实现混合和透明效果
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
// 绘制
g2d.drawImage(waterImg,x,y, waterImgWidth,waterImgHeight,null);
g2d.dispose();// 释放图形上下文使用的系统资源
return buffImg;
}
/**
* 输出水印图片
*
* @param buffImg 图像加水印之后的BufferedImage对象
* @param savePath 图像加水印之后的保存路径
*/
private void generateWaterFile(BufferedImagebuffImg, StringsavePath) {
int temp =savePath.lastIndexOf(".") + 1;
try {
ImageIO.write(buffImg, savePath.substring(temp), new File(savePath));
} catch (IOException e1) {
e1.printStackTrace();
}
}
/**
*
* @param text 二维码内容
* @param width 二维码图片宽度
* @param height 二维码图片高度
* @param format 二维码的图片格式
* @param sourceFilePath 底层图片路径
* @param waterFilePath 二维码路径
* @param saveFilePath 合成图片路径
* @param maginx 二维码距离底图x轴距离
* @param maginy 二维码距离底图y轴距离
* @throws Exception
*/
public void addImageQRcode(Stringtext,intwidth,int height,Stringformat,
String sourceFilePath,String waterFilePath, StringsaveFilePath,intmaginx,intmaginy)throws Exception{
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");// 内容所使用字符集编码
BitMatrix bitMatrix =new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE,width,height,hints);
// 生成二维码
File outputFile = new File("/Users/chenfenqian/Desktop" + File.separator +"new.jpg");
ImageAndQRcode.writeToFile(bitMatrix,format,outputFile);
ImageAndQRcode newImageUtils = new ImageAndQRcode();
// 构建叠加层
BufferedImage buffImg = ImageAndQRcode.watermark(new File(sourceFilePath),new File(waterFilePath),maginx,maginy, 1.0f);
// 输出水印图片
newImageUtils.generateWaterFile(buffImg,saveFilePath);
}
测试代码如下 图片随机找的 说明问题就可以了;
public staticvoid main(String[]args) throws IOException {
ImageAndQRcode add = new ImageAndQRcode();
try {
add.addImageQRcode("http://www.baidu.com", 300, 300,"jpg","/Users/chenfenqian/Documents/图片素材/welcome0.png",
"/Users/chenfenqian/Desktop/new.jpg","/Users/chenfenqian/Desktop/new1.png",780,1620);
} catch (Exceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- Java 背景图片拼接 根据内容生成的二维码
- ios根据文字内容生成二维码
- java根据链接或者文字生成二维码
- Java使用谷歌的zxing生成二维码Qrcode并解析提取二维码图片内容
- 根据字符串生成二维码
- 根据url生成二维码
- Java 将文本内容、网址 ;生成二维码 解析二维码
- 拼接内容,生成xml
- java根据内容生成动态图片
- java二维码 生成二维码
- java生成二维码的Demo
- java二维码的生成上篇
- 二维码的生成方式(java)
- java 生成 二维码的方法
- 根据字符串生成指定二维码
- iOS根据接口生成二维码
- iOS根据URL生成二维码
- 根据url生成二维码方法
- c 语言基础
- 获取web项目的绝对路径的方法总结
- selenium中键盘模拟操作
- 洛谷P2799国王的魔镜
- github上传命令
- Java 背景图片拼接 根据内容生成的二维码
- Eclipse自动补全/自动提示的设置
- Java练习题7
- Xposed hook原理
- 【机房合作】总结
- LeetCode日常刷题(2)
- 【死磕Java并发】-----J.U.C之阻塞队列:LinkedTransferQueue
- C++ error C2662: “LinkNode<T> *List<T>::Locate(int)”: 不能将“this”指针从“const List<int>”转换为“List<int> &”
- 巧妙设计一个mobile or pc 的登录界面