您的位置:首页 > 编程语言 > Java开发

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

}

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: