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

网站开发小图片女孩学网站开发与运营方向怎么样

网站开发小图片,女孩学网站开发与运营方向怎么样,江西省兴赣建设监理咨询有限公司网站,个人简介一、鸿蒙实现处理-压缩上传整体代码处理逻辑 转沙箱压缩获取凭证并上传文件 文件准备(拿到文件流)获取上传凭证(调接口1拿到file_name和upload_url)执行文件上传(向阶段2拿到的upload_url上传文件)更新列表…

 一、鸿蒙实现处理-压缩上传整体代码处理逻辑

  1. 转沙箱
  2. 压缩
  3. 获取凭证并上传文件
    1. 文件准备(拿到文件流)
    2. 获取上传凭证(调接口1拿到file_name和upload_url)
    3. 执行文件上传(向阶段2拿到的upload_url上传文件)
    4. 更新列表数据 (将阶段2获取到的file_name更新进去,最后提交表单时传参)
  4. 提交表单
 // 处理视频/图片(转沙箱、压缩、调接口获取url、上传到OSS)// index不是undefined时:修改async handleFile(messageInfo: MessageInfo, index?: number) {loadingInstance.show()if (this.videoFlag) {// 1视频处理// 1)转沙箱const file = uriToSandBox(messageInfo.sourceFilePath);// 2)压缩const fileUri = await this.videoToCompress(file.fileUri).catch(() => {loadingInstance.hide()showToast('视频压缩失败');});let stat = fs.statSync(fileUri as string);if (stat.size / 1024 / 1024 > 50) {loadingInstance.hide()showToast('请拍摄50M以内的视频');return;}// 3)获取上传凭证并上传fileUri && this.fileUpload(fileUri, messageInfo, index)} else {// 2图片处理const file = uriToSandBox(messageInfo.sourceFilePath);// 1)转沙箱并压缩const fileUri = await this.transferFile(messageInfo.sourceFilePath).catch(() => {loadingInstance.hide()});// 2)获取上传凭证并上传fileUri && this.fileUpload(fileUri, messageInfo, index)}}

二、压缩部分

实现思路:

图片压缩

packing二分方式循环压缩

视频压缩

三种方案

代码:

// 优先压缩图片质量
async qualityPriorityCompress(sourcePixelMap: image.PixelMap, maxCompressedImageSize: number) {let compressedImageData: ArrayBuffer =await this.packing(sourcePixelMap, IMAGE_QUALITY_ZERO, this.afterCompressFmt);// 先判断图片质量参数设置最低0能否满足目标大小。如果能满足目标大小,则直接使用packing二分图片质量。如果不满足,则质量参数固定为0,进行scale尺寸压缩if (compressedImageData.byteLength <= maxCompressedImageSize * BYTE_CONVERSION) {// 满足目标大小,直接使用packing二分await this.packingImage(sourcePixelMap, compressedImageData, maxCompressedImageSize * BYTE_CONVERSION);} else {// 不满足目标大小,质量参数设置为0,再进行scale尺寸压缩await this.scalePriorityCompress(sourcePixelMap, maxCompressedImageSize, IMAGE_QUALITY_ZERO);}// 更新显示压缩后的图片格式this.showCompressFormat = this.afterCompressFmt;
}// packing二分方式循环压缩
async packingImage(sourcePixelMap: image.PixelMap, compressedImageData: ArrayBuffer, maxCompressedImageByte: number) {let imageQuality: number = 0;const DICHOTOMY_ACCURACY = this.minBisectUnit;// 图片质量参数范围为0-100,这里以minBisectUnit为最小二分单位创建用于packing二分图片质量参数的数组。const packingArray: number[] = [];// 性能知识点: 如果对图片压缩质量要求不高,建议调高minBisectUnit(对应‘packing最小二分单位’),减少循环,提升packing压缩性能。for (let i = 0; i <= 100; i += DICHOTOMY_ACCURACY) {packingArray.push(i);}let left = 0; // 定义二分搜索范围的左边界let right = packingArray.length - 1; // 定义二分搜索范围的右边界const AFTER_COMPRESS_FMT = this.afterCompressFmt;// 二分压缩图片while (left <= right) {const mid = Math.floor((left + right) / 2); // 定义二分搜索范围的中间位置imageQuality = packingArray[mid]; // 获取二分中间位置的图片质量值// 根据传入的图片质量参数进行packing压缩,返回压缩后的图片文件流数据。compressedImageData = await this.packing(sourcePixelMap, imageQuality, AFTER_COMPRESS_FMT);// 判断查找一个尽可能接近但不超过压缩目标的压缩大小if (compressedImageData.byteLength <= maxCompressedImageByte) {// 二分目标值在右半边,继续在更高的图片质量参数(即mid + 1)中搜索left = mid + 1;// 判断mid是否已经二分到最后,如果二分完了,退出if (mid === packingArray.length - 1) {break;}// 获取下一次二分的图片质量参数(mid+1)压缩的图片文件流数据compressedImageData = await this.packing(sourcePixelMap, packingArray[mid + 1], AFTER_COMPRESS_FMT);// 判断用下一次图片质量参数(mid+1)压缩的图片大小是否大于指定图片的压缩目标大小。如果大于,说明当前图片质量参数(mid)压缩出来的// 图片大小最接近指定图片的压缩目标大小。传入当前图片质量参数mid,得到最终目标图片压缩数据。if (compressedImageData.byteLength > maxCompressedImageByte) {compressedImageData = await this.packing(sourcePixelMap, packingArray[mid], AFTER_COMPRESS_FMT);break;}} else {// 目标值不在当前范围的右半部分,将搜索范围的右边界向左移动,以缩小搜索范围并继续在下一次迭代中查找左半部分。right = mid - 1;}}// ...
}

三、OSS上传文件部分

方案图:

 

 代码:

鸿蒙环境服务端签名直传_对象存储(OSS)-阿里云帮助中心

 // 获取上传凭证并上传// index不是undefined时:修改private fileUpload = async (fileUrl: string, messageInfo: MessageInfo, index?: number) => {let fileInfo: fs.File | null = null;try {// 阶段1:文件准备fileInfo = await fs.open(fileUrl, fs.OpenMode.READ_ONLY);const fileStat = await fs.stat(fileInfo.fd);const fileData = new ArrayBuffer(fileStat.size);await fs.read(fileInfo.fd, fileData);// 阶段2:获取上传凭证(调接口1拿到file_name和upload_url)const fileType = this.videoFlag ? 'mp4' : 'jpg';const uploadInfo = await this.getUploadCredentials(fileType);// 阶段3:执行文件上传(向阶段2拿到的upload_url上传文件)await this.uploadFileToOSS(uploadInfo.upload_url, fileData, fileStat.size)// 阶段4:更新列表数据 (将阶段2获取到的file_name更新进去,最后提交表单时传参)this.updateMediaLists(uploadInfo.file_name, messageInfo, index);return true;} catch (error) {showToast('文件上传失败,请重新上传')return false;} finally {// 确保资源释放if (fileInfo?.fd) {await fs.close(fileInfo.fd);}loadingInstance.hide();}};

http://www.dtcms.com/wzjs/553893.html

相关文章:

  • 做网站和做免费推广网站的区别软件外包的成本标准
  • H5网站建设网站定制开发客户管理软件 crm
  • 那个网站教人做冰点大连网站设计布局
  • 手机网站图片切换国内有奖活动第一分享平台
  • 网站搭建逻辑结构图WordPress去除官网链接
  • 大兴快速网站建设哪家好益阳建设网站公司
  • 网站建设 熊掌号湖北省建设厅网站怎么打不开
  • 天蝎网站建设公司企业微信一年的费用要多少
  • 网站优化排名易下拉教程学做蛋糕网站
  • 网站原创内容优化wordpress支持论坛
  • wordpress网站不安全dede网站制作
  • 燕莎做网站wordpress首页显示链接
  • 做网站 视频加载太慢网址搜索
  • 网站用自己的电脑做服务器吗设计网站 知乎
  • 网站开发与应用课程讨论定制衣柜十大品牌排名
  • 网站怎么做才美观福建省建设资格注册与管理中心网站
  • 北京东城网站建设公司网站备案详细流程
  • 厦门市建设路网站网站建设与管理考试题
  • 目前会展相关网站的建设情况手机网站开发需要哪些技术
  • 长沙模板网站建设西安企业做网站多少钱
  • 建设网站询价对比表模板网站文件下载系统
  • 网站建设是一个什么的过程做网站的数据从哪里来
  • 吉林智能建站系统价格外贸公司是干什么的
  • 杭州小程序搭建怎么样做seo
  • 品牌网站设计方案重庆app制作
  • 电商网站的功能郑州优化网站收费标准
  • 网站备份湛江网站建设技术托管
  • 宁波网站建设公司哪个好秦皇岛网站建设费用
  • 兰州网站建设ulezhi泰州网页设计需要多少钱
  • 直接用ip做网站网站建设怎么做账