`
aijuans8
  • 浏览: 188350 次
社区版块
存档分类
最新评论

java批量生成图片的问题

    博客分类:
  • java
阅读更多

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标准库提供了一个名为`java.awt`和`javax.imageio`的包,它们包含了创建、显示和保存图像的...

    用java一维码批量生成(条码)图片

    本文将详细讲解如何使用Java语言来批量生成一维码图片,以及可能遇到的问题和解决方案。 首先,Java中实现一维码生成通常会依赖一些库,如ZXing(Zebra Crossing)或者Barbecue。ZXing是一个开源项目,提供了多种...

    Java程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码

    最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在com.fiwan.qrgenerator.GeneratorForm 2、打jar包 java -...

    java实现批量生成二维码

    Java 实现批量生成二维码 Java 实现批量生成二维码是指使用 Java 语言生成大量的二维码,满足实际应用中的需求。本文将详细介绍 Java 实现批量生成二维码的相关代码,供大家参考。 Java 实现批量生成二维码的方法 ...

    java批量图片上传

    总的来说,“Java批量图片上传”是一个涉及前端交互、后端处理、数据库操作以及安全策略等多个技术层面的问题。通过合理的架构设计和优化,我们可以构建一个高效、稳定且安全的图片批量上传系统。在Oracle数据库环境...

    java 实现二维码批量打印

    4. **批量处理**: 如果需要批量生成二维码,可以遍历数据列表,每次调用上述代码生成一个二维码图片。生成后,可以将这些图片保存在服务器上或者内存中。 5. **设置打印任务**: 创建一个Java程序或者Web服务接口,...

    Java窗体程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码图片

    最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在com.fiwan.qrgenerator.GeneratorForm 2、打jar包 java -...

    Java将PDF生成图片

    以下是一些关于“Java将PDF生成图片”的核心知识点: 1. **PDF处理库**:在Java中,我们可以使用第三方库如Apache PDFBox、iText和PDF Clown等来处理PDF文档。这些库提供了丰富的API,用于读取、解析和操作PDF文件...

    Java报表生成图片

    本主题聚焦于“Java报表生成图片”,这涉及到如何使用Java技术将数据转化为易于理解的图像形式。图片报表可以是图表、条形图、饼图等,使复杂的数据一目了然。 在Java中,生成报表图片主要依赖于库和框架,例如...

    java:将html生成图片的所有方法比较

    - 优点:利用无头浏览器,如Chrome的`--headless`模式,可以在后台快速高效地生成图片,结果与实际浏览器一致,支持现代Web技术。 - 缺点:需要安装额外的浏览器,并且可能有版本更新的问题。内存和CPU使用率可能...

    java后台生成echarts图表

    例如,如果你需要批量生成大量图表,可能需要使用多线程来提高效率。同时,确保PhantomJS的版本与`echarts-java`兼容,因为不同版本之间可能存在差异。 总的来说,`java后台生成echarts图表` 是一种有效的数据可视...

    java生成1000张图片,分别在每张图片上写阿拉伯数字1~1000

    在Java编程环境中,生成带有阿拉伯数字的图片是一项实用的任务,特别是在网页开发或者自动化测试中,可能需要这样的图像作为标识或顺序指示。以下是如何使用Java来实现这个功能的详细步骤和相关知识点。 首先,我们...

    java批量上传图片并生成缩略图

    总之,实现"java批量上传图片并生成缩略图"的功能,需要结合Java的Servlet技术处理文件上传,使用图像处理库生成缩略图,并且在前后端之间进行有效的通信。这不仅是技术上的挑战,也是对系统设计和优化能力的考验。

    PageOffice Java开发 实现Word文件的批量生成

    在IT行业中,尤其是在Java开发领域,批量生成Word文档是一项常见的需求,特别是在大数据处理、报告生成或自动化办公场景中。PageOffice是一款强大的Java组件,专为处理Office文档提供解决方案,包括创建、编辑、转换...

    批量打印(java)

    在IT行业中,批量打印是一项常见的需求,特别是在企业级应用中,例如报表生成、订单处理等场景。本话题主要关注如何在Java环境下实现Web批量打印功能。通过提供的信息,我们可以推测这是一个利用某种技术将HTML内容...

    java生成水印图片

    在Java编程语言中,生成带有水印的图片是一项常见的任务,尤其在版权保护、品牌标识或者数据可视化等领域。本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 ...

    Java生成二维码名片

    生成后的二维码,用360的扫一扫或者微信的扫一扫后,自动形成一个用户的名片身份, 可以直接保存到手机通讯录中, 非常方便。 包含的名片信息: 姓名+手机+电话+邮箱+网址+公司+地址。

    java随机生成图片验证码

    Java 随机生成图片验证码是一种常见的网络安全技术,主要用于防止自动化程序(如机器人)进行恶意操作,例如批量注册、刷票等。在这个过程中,我们通常会创建一个包含随机字符的字符串,然后将其显示为带有扭曲、...

    java后台批量下载文件并压缩成zip下载的方法

    Java批量下载文件可以使用Java的文件输入输出流来实现。首先,需要在Servlet中获取文件列表,然后使用循环将文件一个个下载到本地桌面。具体实现代码如下: ```java protected void doGet(HttpServletRequest req, ...

    java文字转图片

    此外,如果要进行批量处理,可以将文本和输出文件名作为参数传递给方法,或者读取文本文件内容,逐行生成图片。这将有助于实现更灵活的解决方案。 总之,Java中的文字转图片功能通过结合`Graphics2D`、`...

Global site tag (gtag.js) - Google Analytics