首页 > 编程语言 >微信小程序根据本地缓存图片路径,生成缩略图的方法

微信小程序根据本地缓存图片路径,生成缩略图的方法

时间:2024-08-24 14:26:05浏览次数:7  
标签:canvas 缓存 const thumbnailWidth 缩略图 微信 thumbnailRange thumbnailHeight

公共方法js文件
/**
 * 生成缩略图
 * @param canvasId canvas容器的id
 * @param fileUrl 缓存在本地图片的路径
 * @param thumbnailRange 期待生成的缩略图尺寸范围,默认150,即宽或高不会超过150px
 */
function generateThumbnail(canvasId,fileUrl,thumbnailRange=150) {
    return new Promise((resolve, reject) => {
      wx.getImageInfo({
        src: fileUrl,
        success: (res) => {
          const previewImageWidth = res.width; // 原图宽度
          const previewImageHeight = res.height; // 原图高度
          wx.createSelectorQuery().select(canvasId).fields({
            node: true,
            size: true,
          }).exec((res) => {
            const previewImageRatio = previewImageWidth / previewImageHeight; // 原图宽高比例
            let thumbnailHeight,thumbnailWidth; 
            if (previewImageRatio > 1) {
                thumbnailWidth = thumbnailRange; // 缩略图宽度固定为 150
              thumbnailHeight = thumbnailWidth / previewImageRatio;
            } else {
                thumbnailHeight = thumbnailRange;
              thumbnailWidth = thumbnailHeight * previewImageRatio;
            }
            const canvas = res[0].node;
            const ctx = canvas.getContext('2d');
            const img = canvas.createImage();
            canvas.width = thumbnailRange;
            canvas.height = thumbnailRange;
            img.src = fileUrl;
            img.onload = () => {
                ctx.drawImage(img,0,0,thumbnailWidth,thumbnailHeight);
                 wx.canvasToTempFilePath({
                    canvas: canvas,
                    x: 0,
                    y: 0,
                    width: thumbnailWidth,
                    height: thumbnailHeight,
                    destWidth: thumbnailWidth,
                    destHeight: thumbnailHeight,
                    success: (res) => {
                        // 解析缩略图的临时路径
                        resolve(res.tempFilePath);
                    },
                    fail: (err) => {
                        reject(err);
                    }
                });
            };
            img.onerror = (err) => {
              reject(err);
            };
          });
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  }
  
/**
 * 将异步生成缩略图所有方法包装成同步方法
 * @param canvasId canvas容器的id
 * @param fileUrl 缓存在本地图片的路径
 * @param thumbnailWidth 期待生成的缩略图宽度,默认150
 * @param thumbnailHeight 期待生成的缩略图高度,默认150
 */
  export async function getThumbnailUrl(canvasId,fileUrl,thumbnailRange) {
    try {
      const url = await generateThumbnail(canvasId,fileUrl,thumbnailRange);
      return url;
    } catch (error) {
      console.error('生成缩略图失败:', error);
      return null;
    }
  }

wxml代码

<canvas class="original-canvas" canvas-id="originalCanvas" id="originalCanvas" type="2d"></canvas>
js引用公共方法代码
const originalUrl = await getThumbnailUrl('#originalCanvas',file.url,800)

标签:canvas,缓存,const,thumbnailWidth,缩略图,微信,thumbnailRange,thumbnailHeight
From: https://www.cnblogs.com/shark1100913/p/18377726

相关文章

  • 缓存出海方案
    优质博文:IT-BLOG-CN一、挑战/注意事项【1】框架组不允许在不同地区部署的独立Redis实例拥有相同的名称,因此不同地区需要使用不用的Redis集群名称。【2】分布式锁问题:该场景需要保证key与UCS灰度策略是可以同步的,即同一个key不会被路由到多个机房。【目前缓存不同步数据......
  • Spring系列之Spring Cache缓存注解的使用
    目录一、概述二、缓存注解1、@Cacheable缓存结果2、@CachePut更新缓存3、@CacheEvict 清除缓存4、@Caching组合缓存(不常用)5、@CacheConfig类级别缓存配置(不常用)6、@CacheResult设置缓存超时(不常用)三、使用方式1、@EnableCaching开启缓存2、在方法上添加注解@C......
  • 微信小程序如何存储值
    微信小程序存储值的方法主要包括本地存储和云存储两种方式。以下是这两种方式的详细介绍:一、本地存储本地存储是在用户的设备上保存数据的技术,使得数据在小程序关闭后仍能保留。微信小程序提供了多种API来实现本地存储功能。1.缓存数据方式:以键值对(key,data)的形式存储数......
  • js根据精、维度获取当前位置与目标位置距离方法微信小程序代码
    js根据精、维度获取当前位置与目标位置距离方法//将角度转换为弧度的函数functionrad(d){returnd*Math.PI/180.0;}//计算两点之间距离的函数functiongetDistance(lat1,lng1,lat2,lng2){varradLat1=rad(lat1);varradLat2=rad(lat2);va......
  • 基于java+ssm+vue的外卖微信小程序
    ......
  • ZNS SSD是不是持久缓存的理想选择?
    随着数据量的增加和技术的进步,对于高效、可靠的存储解决方案的需求日益增长。传统的基于块的SSD虽然具有成本效益和持久性的优点,但在处理写密集型和更新密集型工作负载时存在局限性。NAND闪存的特点是数据只能按页(例如4KiB)写入,不支持原地更新,必须以块为单位进行擦除。然而,块接......
  • 批量检测微信小程序封禁状态的示例代码以及接口
    以下是一个PHP脚本示例,演示了如何批量检查多个微信小程序的封禁状态。您只需要将示例中的`appid1`,`appid2`,`appid3`替换为您实际的小程序应用ID,即可获取各个小程序的状态信息。```php<?php//需要检查的小程序AppID列表$appIds=array('appid1','appid2','a......
  • 织梦cms调用缩略图失真怎么办
    织梦CMS调用缩略图失真的问题可以通过以下几种方式进行解决:检查原始图片质量:确保上传到系统的原始图片具有足够的分辨率和清晰度。失真的缩略图可能是由于原始图片质量不佳造成的。优化织梦CMS的缩略图生成设置:在织梦后台,找到关于生成缩略图的设置选项,这些选项通常位......
  • 微信群发软件安全稳定不封号,微信一键群发2000人的工具,微信一键群发工具官方下载
     今天给大家推荐一款我们目前在使用的电脑群发工具掘金小蜜,不仅可以静默清粉,而且还可以无限多开,方便你同时管理多个账号,群发功能更是十分强大,轻松释放你的双手。掘金小蜜(只支持Win7及以上操作系统,没有推Mac版和手机客户端。)软件下载地址>>点击此处群发功能下载打开登录,这......
  • 清理缓存有什么风险,那又怎么清理电脑缓存垃圾呢
    一、清理缓存的风险清理缓存虽然可以释放存储空间、提升系统性能,但也可能带来以下风险:1.性能短暂下降:清理缓存后,首次访问某些资源时,系统需要重新从原始位置加载数据,这可能导致短暂的访问延迟,影响用户体验。2.数据丢失风险:虽然缓存数据多为临时性质,但在某些特定应用或场景下,缓......