java给图片写正反字体,并将二维码写到图片上,代码实现

/**
     * @param filePath
     *            源图片路径
     * @param markContent
     *            图片中添加内容
     * @param outPath
     *            输出图片路径 字体颜色等在函数内部实现的
     *
     * @param
     */
    // 给jpg添加文字
    public  boolean createStringMark(String url , String filePath, String markContent, int R,int G,int B,String choosefont) {
        ImageIcon imgIcon = new ImageIcon(filePath);
        Image theImg = imgIcon.getImage();
        int width = theImg.getWidth(null) == -1 ? 200 : theImg.getWidth(null);
        int height = theImg.getHeight(null) == -1 ? 200 : theImg.getHeight(null);
        System.out.println(width);
        System.out.println(height);
        System.out.println(theImg);
        BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bimage.createGraphics();

        //Color mycolor1 = Color.white;
        Color mycolor1 = new Color(255,255,255);
        g.setColor(mycolor1);
        g.setBackground(Color.red);
        g.drawImage(theImg, 0, 0, null); // 方法在画布上绘制图像、画布或视频。
        //Font font=new Font("黑体", Font.BOLD, 200);
        Font font=new Font(choosefont, Font.BOLD, 200);
        font = Font(200);
        g.setFont(font); // 字体、字型、字号  三个字350
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        // 计算文字长度,计算居中的x点坐标
        FontMetrics fm = g.getFontMetrics(font);
        int textWidth = fm.stringWidth(markContent);
        int widthX = (width - textWidth) / 2;
        // 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
        g.drawString(markContent,widthX,1130);  

        Color mycolor = new Color(R,G,B);
        g.setColor(mycolor);
        g.setBackground(Color.red);
        //g.drawImage(theImg, 0, 0, null);
        Font rotatefont=new Font(choosefont, Font.BOLD, 200);
        rotatefont =  Font(200);
        g.setFont(rotatefont); // 字体、字型、字号  三个字350
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        FontMetrics rotatefm = g.getFontMetrics(font);
        int rotatetextWidth = rotatefm.stringWidth(markContent);
        int rotatewidthX = (width - rotatetextWidth) / 2;
        //画倒转180度的字体
        g.translate(rotatewidthX+rotatetextWidth, 350);
        g.rotate(Math.toRadians(180));
        g.drawString(markContent, 0, 0);
        g.dispose();
        try {
            long currenttime = System.currentTimeMillis();
            String pathdate = new SimpleDateFormat("yyyy/MM/dd/HH/hh/mm/ss").format(new Date());
            String path = "F:\\pic2018\\"+pathdate;
            File file = new File(path);
            if (!file.exists()) {
                file.mkdirs();
            }
            QRCodeUtil qr = new QRCodeUtil();
            String qrCodepath = qr.Util(url, pathdate);
            String outPath = path+"\\"+currenttime+".jpg";
            FileOutputStream out = new FileOutputStream(outPath); // 先用一个特定的输出文件名
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
            param.setQuality(100, true); //
            encoder.encode(bimage, param);

            InputStream is = new FileInputStream(outPath);
            //通过JPEG图象流创建JPEG数据流解码器
            JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
            //解码当前JPEG数据流,返回BufferedImage对象
            BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
            //得到画笔对象
            Graphics g2 = buffImg.getGraphics();

            //小图片的路径
            ImageIcon QrcodeimgIcon = new ImageIcon(qrCodepath);
            //得到Image对象。
            Image img = QrcodeimgIcon.getImage();
            //将小图片绘到大图片上,5,300 .表示你的小图片在大图片上的位置。
            g2.drawImage(img, 50, 1560, null);
            //设置颜色。
            g2.setColor(Color.WHITE);
            g2.dispose();
            OutputStream os = new FileOutputStream(path+"\\"+currenttime+"zong"+".jpg");
            //创键编码器,用于编码内存中的图象数据。
            JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
            en.encode(buffImg);
            is.close();
            os.close();

            out.close();
        } catch (Exception e) {
            return false;
        }
        return true;
    }
     // 第一个参数是外部字体名,第二个是字体大小
    public static Font loadFont(String fontFileName, float fontSize){
        try{
            File file = new File(fontFileName);
            FileInputStream aixing = new FileInputStream(file);
            Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, aixing);
            Font dynamicFontPt = dynamicFont.deriveFont(fontSize);
            aixing.close();
            return dynamicFontPt;
        }
        catch (Exception e)// 异常处理
        {
            e.printStackTrace();
            return new Font("宋体", Font.BOLD, 200);
        }
    }
    public  Font Font(int fontsize) {
        String root = System.getProperty("user.dir");// 项目根目录路径
        Font font = ImageEdit.loadFont(root + "/FZXBSJW.TTF", fontsize);// 调用
        return font;// 返回字体

原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12079376.html

时间: 2024-10-08 11:16:50

java给图片写正反字体,并将二维码写到图片上,代码实现的相关文章

Java使用zpxing.jar生成带url的二维码

第一步下载zpxing.jar包,并加载进来(网上有很多类似的jar包,这里小编使用的是谷歌提供的jar) 二维码工具类: package com.zpxing.controller; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRe

nodejs 实现二维码生成及图片合成

游戏前端需要做分享功能.生成二维码后 在指定的图片上添加二维码和邀请码 生成新的图片 如图所示 1.使用 qr-code生成二维码 /** * 根据url 地址生成 二维码 */ async createQr(url, name) { let qr_png = qr.image(url, { type: 'png', size: 8, margin: 2 }); let imgName = `${this.app.config.share_path}/${name}.png`; let qr_p

jquery生成二维码并实现图片下载

1.引入jquery的两个js文件 <script src="../scripts/erweima/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="../scripts/erweima/jquery.qrcode.min.js"></script> 2.准备一个展示二维码的div <div id="

pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式

利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: 1 Datawindow的DataObject的单位必须为像素(Pixels). 2 Datawindow的DataObject中放一个Text控件作为要显示QR二维码的位置和大小,长宽要相同 下面代码演示在Datawindow中直接显示QR二维码的操作: 在Datawindow中显示一行QR码: 1 string ls_Data 2 ls_Data = mle_1.Text//QR码内容 3

二维码生成,二维码中嵌套图片,文字生成图片

package com.fh.util; import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream; import javax.

java二维码的生成与解析代码

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

phpqrcode实现二维码(含图片)

---恢复内容开始--- 1,http://phpqrcode.sourceforge.net/ 下载 2,解压以后只需要一个文件 3,原生php测试: <?php include 'phpqrcode.php'; $value = 'http://www.baidu.cn'; //二维码内容 扫描后跳转的网页 $errorCorrectionLevel = 'L';//容错级别 $matrixPointSize = 6;//生成图片大小 //生成二维码图片 QRcode::png($value

二维码(带有图片)的生成

/*************编码转换类[1]***********************/package cn.gp.tools.ErWCodeUtils; import java.io.UnsupportedEncodingException; /** * 作用:编码转换 * @author 小风微灵 * */ public class encodingFunction { public static String getMethodEncoding(String input){ try {

生成二维码并以图片格式下载-qrcodejs2

最近在做项目,碰到票据完成后的生成二维码以及提供下载功能,这里谈谈个人实战经验: 先上代码: 引入: html: js: 说明: 网上文章里提到的插件很多,但是好像并不是都有用(有点坑),实践之后发现“qrcodejs2”这个是有效的: 生成二维码: 调用createQr()方法,获取后台返回的qrUrl(这个大家都懂的老),并将其作为参数传入调用的qrCode(qrUrl)之中: qrCode方法中new qrCode会生成一个qrCode实例,这里的传参是关键,第一个参数是要存放的dom的i