Java 背景图片拼接 根据内容生成的二维码
2017-09-24 20:51
501 查看
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 staticfinal
int
BLACK = 0xFF000000;
private staticfinal
int 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(BitMatrix
matrix, String format, File
file)
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, File
waterFile,int
x, 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, String
savePath) {
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,int
width,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 web项目 在pom.xml文件添加:(谷歌官方API 可以百度搜索 下载Jar 包)
<!-- 图片组合二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.1.0</version>
</dependency>
public class ImageAndQRcode {
private staticfinal
int
BLACK = 0xFF000000;
private staticfinal
int 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(BitMatrix
matrix, String format, File
file)
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, File
waterFile,int
x, 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, String
savePath) {
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,int
width,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根据内容生成二维码图片
- java根据内容生成动态图片
- Java使用谷歌的zxing生成二维码Qrcode并解析提取二维码图片内容
- JAVA给微信公众号二维码添加LOGO时总是生成灰度图片的原因及解决办法
- java代码实现二维码图片的生成和解析
- java代码生成带图片的二维码
- 转:Java生成带有二维码图片的word文档
- php两张图片动态合成thinkphp实现二维码及文字水印合并拼接到背景图上
- 微信公众号点击分享生成分享的图片,可以调整二维码,头像,昵称到背景图指定位置
- Java 将文本内容、网址 ;生成二维码 解析二维码
- java通过jacob调用word (根据Word模板生成动态内容)
- java微信小程序参数二维码生成带背景图加字体(无限生成)
- 发现一个生成二维码的小工具,可以设置背景图片
- JAVA 生成二维码图片 可加Logo
- java使用zxing生成带logo的二维码图片
- [java]生成带logo图片的二维码、以及二维码解码
- java微信小程序参数二维码生成带背景图加字体
- Java 批量生成二维码图片,并打包成可直接下载的zip包(spring boot)
- Java 二维码生成图片《二》
- java生成二维码,二维码中间可带图片