当前位置: 首页 > news >正文

学校网站建设情况说明书网站开发的书籍

学校网站建设情况说明书,网站开发的书籍,学校模板,网站界面切片做程序之前星之音乐下载器有需要生成二维码功能,当时用的是一个开源库来实现的,但是没过多久,发现那个库依赖太多,有个http-client的依赖,把软件都搞大了一倍,而且有时候开发的时候下载依赖还报错,就想换个方案 于是在网上找了下解决方案,最终只需要依赖两个zxing的两个依赖即可实现…之前星之音乐下载器有需要生成二维码功能,当时用的是一个开源库来实现的,但是没过多久,发现那个库依赖太多,有个http-client的依赖,把软件都搞大了一倍,而且有时候开发的时候下载依赖还报错,就想换个方案 于是在网上找了下解决方案,最终只需要依赖两个zxing的两个依赖即可实现功能 本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本,工具类已经封装在common-controls库中 工具支持带logo图标,带底部文本的二维码生成 代码封装 1.引入依赖 dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.5.0/version /dependency dependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.5.0/version /dependency2.使用 由于工具代码过多不便阅读,就先讲些使用,工具代码就放下面了 比较核心的就两个方法,如下面代码所示,其他的方法是带Swing关键字,就是生成Swing包中的Image对象 getQRcodeFxImg()方法就是直接生成Fx的Image对象,可以JavaFx中直接使用 /*** 初始化设置** param qrcodeSize 二维码尺寸默认为320(即320*320)* param logoSize logo图标尺寸,默认为80(即80*80)* param bottomTextSize 底部文字大小,默认20px* param qrcodeType 二维码图片格式,默认为png*/ fun initConfig(qrcodeSize: Int 320, logoSize: Int 80, bottomTextSize: Int 20, qrcodeType: String PNG)/*** 生成二维码图片** param data 二维码文本内容* param logoPath 图标图片的路径* param bottomText 底部文字* return fx的img对象*/ fun getQRcodeFxImg(data: String?, logoPath: String?null, bottomText: String?null): WritableImage使用的话也比较简单: //得到的swing的image对象 val buImg QRCodeUtil.getQRcodeFxImg(这是测试文本) val buImg1 QRCodeUtil.getQRcodeFxImg(这是测试文本, null, 底部文字) val buImg2 QRCodeUtil.getQRcodeFxImg(这是测试文本, /x5.jpg, 底部文字)val list listOf(buImg, buImg1, buImg2)hbox(20.0) {list.forEach {imageview(it) {fitWidth 200.0fitHeight 200.0}} }3.工具库代码   /*** 二维码生成工具类* Created by stars-one*/ object QRCodeUtil {private var QRCODE_SIZE 320 // 二维码尺寸宽度和高度均是320private var LOGO_SIZE 80 // 二维码里logo的尺寸宽高一致 80*80private var BOTTOM_TEXT_SIZE 20 // 底部文本的文字大小private var FORMAT_TYPE PNG // 二维码图片类型/*** 初始化设置** param qrcodeSize 二维码尺寸默认为320(即320*320)* param logoSize logo图标尺寸,默认为80(即80*80)* param bottomTextSize 底部文字大小,默认20px* param qrcodeType 二维码图片格式,默认为png*/fun initConfig(qrcodeSize: Int 320, logoSize: Int 80, bottomTextSize: Int 20, qrcodeType: String PNG) {QRCODE_SIZE qrcodeSizeLOGO_SIZE logoSizeBOTTOM_TEXT_SIZE bottomTextSizeFORMAT_TYPE qrcodeType}/*** 生成二维码图片** param data 二维码文本内容* param logoPath 图标图片的路径* param bottomText 底部文字* return*/fun getQRcodeFxImg(data: String?, logoPath: String?null, bottomText: String?null): WritableImage {val resources ResourceLookup(this)val url if (logoPath null) {null} else {resources.url(logoPath)}val swingImg getQRCodeSwingImg(data, url, bottomText)return SwingFXUtils.toFXImage(swingImg,null)}/*** 默认需要logo,无底部文字* 返回 BufferedImage 可以使用ImageIO.write(BufferedImage, png, outputStream);输出** param dataStr* return 返回 BufferedImage 可以使用ImageIO.write(BufferedImage, png, outputStream);输出*/Throws(Exception::class)fun getQRCodeSwingImg(dataStr: String?): BufferedImage {return getQRCodeSwingImg(dataStr, null, null)}/*** 默认需要logo,无底部文字** param dataStr* return 返回字节数组*/Throws(Exception::class)fun getQRCodeByte(dataStr: String?): ByteArray {val bufferedImage getQRCodeSwingImg(dataStr, null, null)val outputStream ByteArrayOutputStream()ImageIO.write(bufferedImage, FORMAT_TYPE, outputStream)return outputStream.toByteArray()}/*** 默认需要logo包含底部文字 文字为空则不显示文字* 返回 BufferedImage 可以使用ImageIO.write(BufferedImage, png, outputStream);输出** param dataStr* return*/Throws(Exception::class)fun getQRCodeSwingImg(dataStr: String?, bottomText: String?): BufferedImage {return getQRCodeSwingImg(dataStr, null, bottomText)}/*** 默认需要logo包含底部文字 文字为空则不显示文字** param dataStr* return 返回字节数组*/Throws(Exception::class)fun getQRCodeByte(dataStr: String?, bottomText: String?): ByteArray {val bufferedImage getQRCodeSwingImg(dataStr, null, bottomText)val outputStream ByteArrayOutputStream()ImageIO.write(bufferedImage, FORMAT_TYPE, outputStream)return outputStream.toByteArray()}/*** 获取二维码图片** param dataStr 二维码内容* param needLogo 是否需要添加logo* param bottomText 底部文字 为空则不显示* return*/Throws(Exception::class)fun getQRCodeSwingImg(dataStr: String?, url: URL?, bottomText: String?): BufferedImage {if (dataStr null) {throw RuntimeException(未包含任何信息)}val hints HashMapEncodeHintType, Any?()hints[EncodeHintType.CHARACTER_SET] utf-8 //定义内容字符集的编码hints[EncodeHintType.ERROR_CORRECTION] ErrorCorrectionLevel.L //定义纠错等级hints[EncodeHintType.MARGIN] 1val qrCodeWriter QRCodeWriter()val bitMatrix qrCodeWriter.encode(dataStr, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints)val width bitMatrix.widthval height bitMatrix.heightvar tempHeight heightif (StringUtils.isNotBlank(bottomText)) {tempHeight tempHeight 12}val image BufferedImage(width, tempHeight, BufferedImage.TYPE_INT_RGB)for (x in 0 until width) {for (y in 0 until height) {image.setRGB(x, y, if (bitMatrix[x, y]) -0x1000000 else -0x1)}}// 判断是否添加logoif (url ! null) {insertLogoImage(image, url)}// 判断是否添加底部文字if (StringUtils.isNotBlank(bottomText)) {addFontImage(image, bottomText)}return image}/*** 插入logo图片** param source 二维码图片* throws Exception*/Throws(Exception::class)private fun insertLogoImage(source: BufferedImage, url: URL) {var src: Image ImageIO.read(url)val width LOGO_SIZEval height LOGO_SIZEval image src.getScaledInstance(width, height, Image.SCALE_SMOOTH)val tag BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)val g tag.graphicsg.drawImage(image, 0, 0, null) // 绘制缩小后的图g.dispose()src image// 插入LOGOval graph source.createGraphics()val x (QRCODE_SIZE - width) / 2val y (QRCODE_SIZE - height) / 2graph.drawImage(src, x, y, width, height, null)val shape: Shape RoundRectangle2D.Float(x.toFloat(), y.toFloat(), width.toFloat(), width.toFloat(), 6f, 6f)graph.stroke BasicStroke(3f)graph.draw(shape)graph.dispose()}private fun addFontImage(source: BufferedImage, declareText: String?) {//生成imageval defineWidth QRCODE_SIZEval defineHeight 20val textImage BufferedImage(defineWidth, defineHeight, BufferedImage.TYPE_INT_RGB)val g2 textImage.graphics as Graphics2D//开启文字抗锯齿g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON)g2.background Color.WHITEg2.clearRect(0, 0, defineWidth, defineHeight)g2.paint Color.BLACKval context g2.fontRenderContext//部署linux需要注意 linux无此字体会显示方块val font Font(宋体, Font.BOLD, BOTTOM_TEXT_SIZE)g2.font fontval lineMetrics font.getLineMetrics(declareText, context)val fontMetrics: FontMetrics FontDesignMetrics.getMetrics(font)val offset ((defineWidth - fontMetrics.stringWidth(declareText)) / 2).toFloat()val y (defineHeight lineMetrics.ascent - lineMetrics.descent - lineMetrics.leading) / 2g2.drawString(declareText, offset.toInt(), y.toInt())val graph source.createGraphics()//开启文字抗锯齿graph.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON)//添加imageval width textImage.getWidth(null)val height textImage.getHeight(null)val src: Image textImagegraph.drawImage(src, 0, QRCODE_SIZE - 8, width, height, Color.WHITE, null)graph.dispose()} }
http://www.huolong8.cn/news/5818/

相关文章:

  • 做蛋糕招聘网站芯片最新消息
  • 网站建设如何上传图片免费咨询法律援助电话号码
  • 绍兴网站制作系统小鱼儿外贸建站
  • 高端大气的科技网站模板xampp网站后台
  • flash网站模板帮小公司代账一个月费用
  • ps做产品的网站大连网站建设招标
  • 东莞高端品牌网站建设网站开发广告语大全
  • 简述网站的建设方案2021安全员证报名入口
  • 自建站网站做调查问卷权威网站
  • 聚合猫网站建设花蝴蝶免费直播视频在线观看
  • 常德网站开发服务包小盒设计网站官网
  • 临沂网站维护公司厦门零基础学seo
  • 制作自己网站有什么用计算机专业网站开发开题报告
  • 搭建dede网站服务器企业seo多少费用
  • 承接网站建设文案遵义仁怀网站建设
  • 网站备案号图标简述常用的网络营销方法有哪些
  • 坪山城市建设局官方网站太原网站模板
  • 发布文章后马上更新网站主页自己的电脑做服务器建立网站的方法
  • 群晖可以做几个网站it行业公司排名
  • 网站建设盐城建站管理过程
  • 外国的贸易网站定做微信小程序
  • 在什么网站上做自媒体网站检测中心
  • 麦积区建设局网站wordpress分类列表插件
  • 央企网站建设百度做免费推广的步骤
  • 精品资源共享课网站建设无极网页游戏
  • 河南省建设厅网站wordpress建站服务器选择
  • 广元网站建设工作室建个微商城网站多少钱
  • 制作链接的app的软件温州哪里有网站优化
  • 网站开发策略烟台主流网站
  • 推进门户网站建设工作会议做网站主要学什么