1.linux安装字体
以微软雅黑为例,找到msyh.ttf ,copy至下面的文件夹
usr/share/fonts/msyh
执行命令:fc-cache -fv
重启jvm即可2.drawString 部分代码private static BufferedImage drawString(int type, boolean isWhite,
int width, int height, String price, Font font_money, Font font,
Graphics2D g2d, Rectangle2D bounds, Rectangle2D bounds_money) {
BufferedImage image;
//透明背景
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
//反锯齿字体
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if(!isWhite){
//非白字
g2d.setColor(new Color(236,0,137));
}else{
//白字
g2d.setColor(new Color(255,255,255));
}
//字体居中
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2d.setStroke(new BasicStroke(1));
g2d.setFont(font_money);
g2d.drawString(FONT_RMB_CHAR, -2, (int)baseY);
g2d.setFont(font);
g2d.drawString(price, (int)bounds_money.getWidth()-4, (int)baseY);
g2d.dispose();
return image;
}
3.如果需要根据字符串的长度生成图片的宽度,可以使用如下方法
Rectangle2D bounds = font.getStringBounds(price, context);
width = (int)(bounds.getWidth();
4.批量生成,使用java自带的线程池,并使用CompletionService,目的是在线程处理结束后得到生成成功的ProductId
public boolean generateImagesBatch(){
boolean flag=true;
ExecutorService exec = Executors.newFixedThreadPool(8);
CompletionService<CallBack> completionService=
new ExecutorCompletionService<CallBack>(exec);
long startTime=System.currentTimeMillis();
String sql="select productId,price from prod";
List<Map> skuList = this.cmsJdbcTemplate.queryForList(sql);
for(Map map:skuList){
String prodId=((BigDecimal)map.get("productId")).toString();
double price=((BigDecimal)map.get("price")).doubleValue();
completionService.submit(new CreateImageConcurrent(prodId,price,FontEnum.ONE,false));
completionService.submit(new CreateImageConcurrent(prodId,price,FontEnum.TWO,false)); }
long endTime=System.currentTimeMillis()-startTime;
log.info("query db time>>>>>>>>>>>>>>"+endTime/1000);
Future<CallBack> future;
int count=skuList.size()*6;
log.info("generateImagesBatch count:"+count);
try {
while(count>0){
future = completionService.take();
CallBack callBack = future.get();
if(null!=callBack){
count--; log.info("generateImagesBatch prod id:"+callBack.getSuccesMessage()); }
}
endTime=System.currentTimeMillis()-startTime;
log.info("create images time>>>>>>>>>>>>>>"+endTime/1000);
log.info("generateImagesBatch success!");
flag=true;
} catch (ExecutionException e) {
flag=false;
log.error("generateImagesBatch fail::ExecutionException::"+e.getMessage());
} catch (InterruptedException e) {
flag=false;
log.error("generateImagesBatch fail::InterruptedException::"+e.getMessage());
}finally{
exec.shutdown();
}
return flag;
}
分享到:
相关推荐
这里我们将深入探讨如何使用Java根据配置文件批量生成图片。 首先,要生成图片,我们需要理解Java中的图像处理库。Java标准库提供了一个名为`java.awt`和`javax.imageio`的包,它们包含了创建、显示和保存图像的...
本文将详细讲解如何使用Java语言来批量生成一维码图片,以及可能遇到的问题和解决方案。 首先,Java中实现一维码生成通常会依赖一些库,如ZXing(Zebra Crossing)或者Barbecue。ZXing是一个开源项目,提供了多种...
最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在com.fiwan.qrgenerator.GeneratorForm 2、打jar包 java -...
Java 实现批量生成二维码 Java 实现批量生成二维码是指使用 Java 语言生成大量的二维码,满足实际应用中的需求。本文将详细介绍 Java 实现批量生成二维码的相关代码,供大家参考。 Java 实现批量生成二维码的方法 ...
总的来说,“Java批量图片上传”是一个涉及前端交互、后端处理、数据库操作以及安全策略等多个技术层面的问题。通过合理的架构设计和优化,我们可以构建一个高效、稳定且安全的图片批量上传系统。在Oracle数据库环境...
4. **批量处理**: 如果需要批量生成二维码,可以遍历数据列表,每次调用上述代码生成一个二维码图片。生成后,可以将这些图片保存在服务器上或者内存中。 5. **设置打印任务**: 创建一个Java程序或者Web服务接口,...
最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在com.fiwan.qrgenerator.GeneratorForm 2、打jar包 java -...
以下是一些关于“Java将PDF生成图片”的核心知识点: 1. **PDF处理库**:在Java中,我们可以使用第三方库如Apache PDFBox、iText和PDF Clown等来处理PDF文档。这些库提供了丰富的API,用于读取、解析和操作PDF文件...
本主题聚焦于“Java报表生成图片”,这涉及到如何使用Java技术将数据转化为易于理解的图像形式。图片报表可以是图表、条形图、饼图等,使复杂的数据一目了然。 在Java中,生成报表图片主要依赖于库和框架,例如...
- 优点:利用无头浏览器,如Chrome的`--headless`模式,可以在后台快速高效地生成图片,结果与实际浏览器一致,支持现代Web技术。 - 缺点:需要安装额外的浏览器,并且可能有版本更新的问题。内存和CPU使用率可能...
例如,如果你需要批量生成大量图表,可能需要使用多线程来提高效率。同时,确保PhantomJS的版本与`echarts-java`兼容,因为不同版本之间可能存在差异。 总的来说,`java后台生成echarts图表` 是一种有效的数据可视...
在Java编程环境中,生成带有阿拉伯数字的图片是一项实用的任务,特别是在网页开发或者自动化测试中,可能需要这样的图像作为标识或顺序指示。以下是如何使用Java来实现这个功能的详细步骤和相关知识点。 首先,我们...
总之,实现"java批量上传图片并生成缩略图"的功能,需要结合Java的Servlet技术处理文件上传,使用图像处理库生成缩略图,并且在前后端之间进行有效的通信。这不仅是技术上的挑战,也是对系统设计和优化能力的考验。
在IT行业中,尤其是在Java开发领域,批量生成Word文档是一项常见的需求,特别是在大数据处理、报告生成或自动化办公场景中。PageOffice是一款强大的Java组件,专为处理Office文档提供解决方案,包括创建、编辑、转换...
在IT行业中,批量打印是一项常见的需求,特别是在企业级应用中,例如报表生成、订单处理等场景。本话题主要关注如何在Java环境下实现Web批量打印功能。通过提供的信息,我们可以推测这是一个利用某种技术将HTML内容...
在Java编程语言中,生成带有水印的图片是一项常见的任务,尤其在版权保护、品牌标识或者数据可视化等领域。本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 ...
生成后的二维码,用360的扫一扫或者微信的扫一扫后,自动形成一个用户的名片身份, 可以直接保存到手机通讯录中, 非常方便。 包含的名片信息: 姓名+手机+电话+邮箱+网址+公司+地址。
Java 随机生成图片验证码是一种常见的网络安全技术,主要用于防止自动化程序(如机器人)进行恶意操作,例如批量注册、刷票等。在这个过程中,我们通常会创建一个包含随机字符的字符串,然后将其显示为带有扭曲、...
Java批量下载文件可以使用Java的文件输入输出流来实现。首先,需要在Servlet中获取文件列表,然后使用循环将文件一个个下载到本地桌面。具体实现代码如下: ```java protected void doGet(HttpServletRequest req, ...
此外,如果要进行批量处理,可以将文本和输出文件名作为参数传递给方法,或者读取文本文件内容,逐行生成图片。这将有助于实现更灵活的解决方案。 总之,Java中的文字转图片功能通过结合`Graphics2D`、`...