java微信小程序长按识别太阳码

  • F8_612099
    了解作者
  • 119.8KB
    文件大小
  • 文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-12 10:05
    上传日期
java微信小程序长按识别太阳码(偶尔得到的,不是我写的),可以截取长方形头像图片剪切成圆形头像。详情见源码。
java微信小程序长按识别太阳码.rar
  • 学习相关
  • point.png
    15KB
  • result.jpg
    51.6KB
  • qrcode.jpg
    16.9KB
  • background.jpg
    31.3KB
  • Main.java
    1.2KB
  • avastar.jpg
    37.5KB
  • SharedImageUtils.java
    13.6KB
内容介绍
package com.company; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import java.awt.*; import java.awt.geom.Area; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.*; import java.util.Iterator; /** * 生成朋友圈分享图相关接口 * * @author zhangkeke * @since 2017/10/18 15:31 */ public class SharedImageUtils { // 要放置的二维码大小 public static final int QRCODE_SIZE = 300; // 要放置的二维码高度 public static final int QRCODE_Y = 540; // 要放置的头像半径 public static final int AVATAR_SIZE = 160; // 要放置的头像y坐标 public static final int AVATAR_Y = 150; // 昵称的高度 public static final int FONT_Y = 370; // 推广文案的高度 public static final int COPYWRITER = 415; // 二维码识别图案高度 public static final int RECOGNITION_QRCODE_Y = 890; // 二维码识别图案大小 public static final int RECOGNITION_QRCODE_SIZE = 260; /** * 裁剪图片 * * @param img the img * @param originWidth the origin width * @param originHeight the origin height * @return the buffered image * @throws Exception the exception */ public static BufferedImage cutPicture(BufferedImage img, int originWidth, int originHeight) throws IOException { int width = img.getWidth(); // 原图的宽度 int height = img.getHeight(); //原图的高度 int newImage_x = 0; // 要截图的坐标 int newImage_y = 0; // 要截图的坐标 if (width > originWidth) { newImage_x = (width - originWidth) / 2; } if (height > originHeight) { newImage_y = height - originHeight; } return cutJPG(img, newImage_x, newImage_y, originWidth, originHeight); } /** * 图片拉伸 * * @param originalImage the original image * @param originWidth the origin width * @param originHeight the origin height * @return the buffered image * @throws Exception the exception */ public static BufferedImage zoomPicture(String originalImage, int originWidth, int originHeight) throws Exception { // 原来的图片 BufferedImage img = ImageIO.read(new File(originalImage)); int width = img.getWidth(); // 原图的宽度 int height = img.getHeight(); //原图的高度 int scaledWidth = width; int scaledHeight = height; // 如果不是正方形 if (width == height) { // 按照originHeight进行缩放 scaledWidth = originHeight; scaledHeight = originHeight; } else { if (width > height) { // 按照originHeight进行缩放 scaledWidth = (scaledWidth * originHeight) / scaledHeight; scaledHeight = originHeight; } else { // 宽高比例 int originPercent = (originHeight * 100) / originWidth; int newPercent = (height * 100) / width; if (newPercent >= originPercent) { // 按照originWidth进行缩放 scaledWidth = originWidth; scaledHeight = (originHeight * scaledWidth) / scaledWidth; } else { // 按照originHeight进行缩放 scaledWidth = (scaledWidth * originHeight) / scaledHeight; scaledHeight = originHeight; } } } Image schedImage = img.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH); // 新的图片 BufferedImage bufferedImage = new BufferedImage(scaledWidth, scaledHeight, img.getType()); Graphics2D g = bufferedImage.createGraphics(); // 绘制 g.drawImage(schedImage, 0, 0, null); g.dispose(); return bufferedImage; } /** * 进行裁剪操作 * * @param originalImage the original image * @param x the x * @param y the y * @param width the width * @param height the height * @return the buffered image * @throws IOException the io exception */ public static BufferedImage cutJPG(BufferedImage originalImage, int x, int y, int width, int height) throws IOException { Iterator<ImageReader> iterator = ImageIO.getImageReadersByFormatName("jpg"); ImageReader reader = iterator.next(); // 转换成字节流 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", outputStream); InputStream is = new ByteArrayInputStream(outputStream.toByteArray()); ImageInputStream iis = ImageIO.createImageInputStream(is); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rect = new Rectangle(x, y, width, height); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); return bi; } /** * 合并头像和昵称 * * @param baseImage the base image * @param topImage the top image * @return the buffered image * @throws Exception the exception */ public static BufferedImage mergePicture(BufferedImage baseImage, BufferedImage topImage, String nickName) throws IOException { int width = baseImage.getWidth(null); //底图的宽度 int height = baseImage.getHeight(null); //底图的高度 // 按照底图的宽高生成新的图片 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.createGraphics(); g.drawImage(baseImage, 0, 0, width, height, null); int smallWidth = topImage.getWidth(null); // 上层图片的宽度 // 设置上层图片放置的位置的坐标及大小 g.drawImage(topImage, (width - smallWidth) / 2, AVATAR_Y, AVATAR_SIZE, AVATAR_SIZE, null); // 普通字体 Font font = new Font("微软雅黑", Font.PLAIN, 30); g.setFont(font); g.setColor(new Color(68,68,68)); FontMetrics fm = g.getFontMetrics(font); // 昵称长度和放置的位置 int textWidth = fm.stringWidth(nickName); g.drawString(nickName, (width - textWidth) / 2, FONT_Y); g.dispose(); return image; } /** * 按指定的字节数截取字符串(一个中文字符占3个字节,一个英文字符或数字占1个字节) * @param sourceString 源字符串 * @param cutBytes 要截取的字节数 * @return */ public static String cutString(String sourceString, int cutBytes) { if (sourceString == null || "".equals(sourceString.trim())) { return ""; } int lastIndex = 0; boolean stopFlag = false; int totalBytes = 0; for (int i = 0; i < sourceString.length(); i++) { String s = Integer.toBinaryString(sourceString.charAt(i)); if (s.length() > 8) { totalBytes += 3; } else { totalBytes += 1; } if (!stopFlag) { if (totalBytes == cutBytes) { lastIndex = i; stopFlag = true; } else if (totalBytes > cutBytes) { lastIndex = i - 1; stopFlag = true; } } } if (!stopFlag) { return sourceString; } else { return sourceStr
评论
    相关推荐
    • 小程序微信支付后台例子
      小程序微信支付「后端商户系统」。配合 LeanCloud 小程序 SDK 快速实现小程序微信支付功能。 部署配置环境变量 开始之前,请确保已经按照下面的步骤完成了环境变量的配置: 进入应用控制台 - 云引擎 - 设置 设置应用...
    • 微信小程序微信小程序游戏纪念碑古游戏源码
      现在微信小程序游戏比较火,跳一跳风靡,这里给大家分享一个小程序游戏:纪念碑谷的源码,希望能帮助到大家
    • 分答小程序 微信小程序源码
      微信小程序源码,前端源码,简单展示源码,原生小程序源码 非uniapp,仅供参考,如有涉及版权问题请联系作者。微信小程序源码,前端源码,简单展示源码,原生小程序源码 非uniapp,仅供参考,如有涉及版权问题请联系...
    • 订餐小程序微信小程序源码,仿饿了么
      仿饿了么写的订餐小程序,使用写的 代码亲测可用,订餐或者商城都可以拿来修改
    • 从0 到1实现天气小程序 微信小程序 文档教学
      在小册中,从基础知识开始,逐步讲解小程序的开发技能,最后带领大家通过实战「新鲜天气」小程序,完成了小程序的入门到上线的全流程。 在小册的最后,比较下小程序的开源开发框架,最后再展望下小程序的前景。
    • 影视小程序 微信小程序源码
      影视小程序 微信小程序源码
    • 同城拼车小程序微信小程序拼车小程序 php后台 mysql数据库
      同城拼车小程序微信小程序拼车小程序 php后台 mysql数据库 亲测可用
    • CatToolBox:猫咪工具箱小程序 微信小程序
      微信小程序简介 当前版本:v0.9.11 猫咪工具箱是一款集结万千花样于一体的小程序,目前功能还在不断完善中,会不定期更新功能~ 功能列表 物流查询 星座查询 聊天机器人 笑话大全 黄历运势 音乐播放 历史今日(屏蔽)...
    • Minibbs Discuz转小程序 微信小程序源码
      inbbs 1.0版,基于dz开发的微信小程序社区系统,已测试可用,其中server结尾的是服务端借口文件,weixin结尾的是小程序文件,服务端文件直接上传到dz目录下即可。 还有不明白的可以参考官方文档 ...
    • Minibbs Discuz转小程序 微信小程序客户端 亲测可用
      MinBBS是一款基于微信小程序开发的社区论坛系统,程序需依赖于Discuz运行,独立的数据交互接口使得小程序运行的同时与当前Discuz可以实现数据同步且互不干扰,是传统Discuz社区拓展小程序版的最佳方案。亲测可用。