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

}

    }



原创粉丝点击