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;// 返回字体
java给图片写正反字体,并将二维码写到图片上,代码实现的更多相关文章
- js生成二维码以及插入图片
先根据qrcode官网demo,不同属性值的变化,二维码的变化效果:https://larsjung.de/jquery-qrcode/latest/demo/ 进入demo中,审查元素查看里面引用的 ...
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...
- jquery生成二维码并实现图片下载
1.引入jquery的两个js文件 <script src="../scripts/erweima/jquery-1.10.2.min.js"></script& ...
- 图片的URL上传至阿里云OSS操作(微信小程序二维码返回的二进制上传到OSS)
当我们从网络中获取一个URL的图片我们要存储到本地或者是私有的云时,我们可以这样操作 把url中的图片文件下载到本地(或者上传到私有云中) public String uploadUrlToOss ...
- 【java】google的zxing架包生成二维码和读取二维码【可带文字和logo】
承接RC4生成不重复字符串的需求之后,因为优惠码要方便用户使用的缘故,所以思来想去,觉得还是直接生成二维码给用户直接扫比较实用,也不用用户专门记录冗长的优惠码编号. ================= ...
- js将网址转为二维码并下载图片
将一个网址转为二维码, 下面可以添加文字, 还提供下载功能 利用的是 GitHub上面的qrcode.js 和canvas <!DOCTYPE html> <html> < ...
- java二维码的生成与解析代码
二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1. 高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或 ...
- phpqrcode实现二维码(含图片)
---恢复内容开始--- 1,http://phpqrcode.sourceforge.net/ 下载 2,解压以后只需要一个文件 3,原生php测试: <?php include 'phpqr ...
- Springboot生成二维码并下载图片png支持打包成zip
pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...
- Asp.Net 合并图片(二维码和其他图片合并)
需求:根据网址生成二维码,然后再把二维码生成到背景图片上,然后显示在网页中 pic.ashx <%@ WebHandler Language="C#" Class=" ...
随机推荐
- IPFS学习-分布式哈希表DHT
Distributed Hash Tables(DHT) 分布式哈希表是一个分布式的键值对存储结构.在IPFS网络中,每一个节点都维护一个DHT的子集.当节点接受到一个请求.该节点要么直接回复,要么通 ...
- 使用 ASP.NET Core MVC 创建 Web API(六)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...
- 避免网络爬虫IP被封的策略
背景 这两天一直在搞Java网络爬虫作为Java课程设计,目标是爬取豆瓣电影top250的影评,之后可能还需要进行情感分析,当然这就不是爬虫的内容了.我的爬虫程序在一开始只是一个页面一个页面的爬取信息 ...
- .Net WebApi 使用Session
直接使用Session 会报错“未将对象引用设置到对象的实例”. 解决办法:在Global中添加如下代码 /// <summary> /// 打开session /// </summ ...
- WPF 3D Cube及点击交互
在WPF中构建一个简单的立方体比较容易实现,可参考资料也比较众多.比较麻烦的是处理点击交互. 我在WPF中用两种方式实现了3DCube,效果图如下: 方式一: 最常见的3D内容构建模式,结构如下图. ...
- linux用户身份与文件权限
用户 useradd [ 参数 ] 用户名 添加用户 sudo useradd -d /home/test -u 1001 -s /bin/bash name usermod [选项] 用户名 更改用 ...
- SSM + VUE 实现简单的 CRUD
一.项目分析 1.需求 (1)使用 ssm + vue 实现一个crud(数据库增删改查)的简单实现.(2)前后端分离,前端页面展示+后台管理. 2.技术点 (1)基础框架: SSM(Spring,S ...
- JS Navigator
JS Navigator window.navigator 对象包含有关访问者浏览器的信息. Window Navigator window.navigator 对象在编写时可不使用 window 这 ...
- memcache和redis缓存对比及我为什么选择redis
对比结论 1. 性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高.而在100k以 ...
- 正确设置越狱版ios的终端编码--命令行中文的处理
本文是针对越狱版iPhone手机的,手机没有越狱就别看了,看了也没办法用. 越狱版的iPhone当然是为了跟电脑一样做各种有趣的事情的. 但通常越狱的iPhone在命令行都无法处理中文,比如你的播放器 ...