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

做外贸网站需要注意些什么手续wordpress图片上传错误

做外贸网站需要注意些什么手续,wordpress图片上传错误,国外好的设计网站有哪些,学生空间建设网站背景: 在使用某些支持webgl的图形库(eg:PIXI.js,fabric.js)场景中,如果加载的纹理超过webgl可处理的最大纹理限制,会导致渲染的纹理缺失,甚至无法显示。 方案 实现图片自动压缩算…

背景:

在使用某些支持webgl的图形库(eg:PIXI.js,fabric.js)场景中,如果加载的纹理超过webgl可处理的最大纹理限制,会导致渲染的纹理缺失,甚至无法显示。

方案

实现图片自动压缩算法,自动获取 webgl 支持的最大纹理大小,设置一个压缩比率,循环压缩图片的像素,直到小于最大纹理限制。
返回 canvas,方便第三方库继续处理,如果需要 image,可自行调用canvas方法转换成image。

注意:如果不需要像素处理,删除处理像素相关的代码即可。

vim imageHelp.ts

/**** @param imgStr image base64 | url* @param ratio 压缩比率* @returns 压缩后的canvas对象,获取image 使用 canvas.convertToBlob()*/
export async function compressImage(options: { imgStr: string; ratio?: number; negate?: 0 | 1 }) {const { imgStr, ratio = 0.5, negate = 0 } = optionsconst isInverted = negate == 1 // 底色是否反黑色// 2. 添加错误处理if (!imgStr) throw new Error('Invalid image source')if (ratio <= 0 || ratio > 1) throw new Error('Invalid compression ratio')try {const img = await loadImage(imgStr)const maxTextureSize = getMaxTextureSize()// 5. 优化尺寸计算逻辑const { width, height } = calculateTargetSize(img, ratio, maxTextureSize)// 6. 使用 OffscreenCanvas 提升性能const { canvas, ctx } = createCanvasContext(width, height)ctx.drawImage(img, 0, 0, width, height)// 7. 添加 Worker 终止逻辑防止内存泄漏const worker = new CanvasWorker()const cleanup = () => worker.terminate()return await new Promise<{ canvas: OffscreenCanvas; width: number; height: number }>((resolve, reject) => {worker.onmessage = (e) => {try {// imageData.data.buffer 所有权已转移,无法更新数据 imageData.data.buffer//  重新构建 ImageData 对象const updatedImageData = new ImageData(new Uint8ClampedArray(e.data.buffer),canvas.width,canvas.height)// 将修改后的图像数据放回画布ctx.putImageData(updatedImageData, 0, 0)cleanup()if (width > maxTextureSize || height > maxTextureSize) {// 压缩后的图像需要缩放,保持原图像的视觉大小ctx.scale(1 / ratio, 1 / ratio)}resolve({canvas,width,height,})} catch (error) {cleanup()reject(error)}}worker.onerror = (error) => {cleanup()reject(error)}// 8. 优化数据传输const imageData = ctx.getImageData(0, 0, width, height)// 传递图像数据给worker,第二个参数是一个Transferable对象,可以将数据从一个线程传递到另一个线程,而不是复制worker.postMessage({buffer: imageData.data.buffer,targetColor: isInverted ? [0, 0, 0, 255] : [255, 255, 255, 255],tolerance: 50, // 添加颜色容差参数},[imageData.data.buffer])})} catch (error) {throw new Error(`Image processing failed: ${error?.message}`)}
}
function getMaxTextureSize(): number {const gl = document.createElement('canvas').getContext('webgl')return gl ? gl.getParameter(gl.MAX_TEXTURE_SIZE) : 4096 // 默认值
}function calculateTargetSize(img: { width: number; height: number },ratio: number,maxSize: number
) {let width = img.widthlet height = img.height// 压缩图像像素while (width > maxSize || height > maxSize) {width *= ratioheight *= ratio}return {width,height,}
}function createCanvasContext(width: number, height: number) {const canvas = new OffscreenCanvas(width, height)canvas.width = widthcanvas.height = heightreturn {canvas,ctx: canvas.getContext('2d')!,}
}

vim canvas.worker.ts

self.onmessage = (event) => {const { buffer, targetColor, isInverted } = event.data// 转换为 Uint8ClampedArray 进行像素级别的处理const data = new Uint8ClampedArray(buffer);// 遍历每个像素for(let i = 0; i < data.length; i += 4) {const r = data[i];     // 红色通道const g = data[i + 1]; // 绿色通道const b = data[i + 2]; // 蓝色通道// 检查该像素是否为需要删除的颜色if(r === targetColor[0] && g === targetColor[1] && b === targetColor[2]) {// 将黑色像素设置为透明data[i + 3] = 0; // Alpha通道设置为0}// 反转颜色if(isInverted) {data[i] = 255 - data[i]data[i + 1] = 255 - data[i + 1]data[i + 2] = 255 - data[i + 2]}}self.postMessage(data)
}

文章转载自:

http://IuzYF9mS.pbgnx.cn
http://bi8p6LHN.pbgnx.cn
http://LN9WhhNW.pbgnx.cn
http://sAt7HH76.pbgnx.cn
http://gA68tCJ3.pbgnx.cn
http://Xj4GHCyD.pbgnx.cn
http://R7Hf7aJp.pbgnx.cn
http://3D67EFae.pbgnx.cn
http://xjMtVNv6.pbgnx.cn
http://wiCs718L.pbgnx.cn
http://sLr4Qhzq.pbgnx.cn
http://V64vKYc5.pbgnx.cn
http://2miNmnfP.pbgnx.cn
http://jbsvhkcU.pbgnx.cn
http://wi6Nj0Or.pbgnx.cn
http://pyHb8caS.pbgnx.cn
http://j0LxNIyt.pbgnx.cn
http://L2kgAVlT.pbgnx.cn
http://ubOHSxOg.pbgnx.cn
http://2PpbpYkO.pbgnx.cn
http://nJHGaO6Y.pbgnx.cn
http://3jcGs5fW.pbgnx.cn
http://BYU8anDn.pbgnx.cn
http://pGpeAQHr.pbgnx.cn
http://kAksTNIQ.pbgnx.cn
http://1SvB98fv.pbgnx.cn
http://AzB1ZZRc.pbgnx.cn
http://PYjDtO9l.pbgnx.cn
http://h9ZS2occ.pbgnx.cn
http://ElZ8DOEv.pbgnx.cn
http://www.dtcms.com/wzjs/768400.html

相关文章:

  • 温州建设企业网站辽阳网站设计
  • 外贸网站的推广网上商城开发方案
  • 官方网站下载12306网站域名申请流程
  • 网站建站大约多少钱成都网站建设哪里好点
  • 昆明专业网站建设模板中天建设集团有限公司电话号码
  • 做网站先做前端好还是先做逻辑连云港网站建设服务
  • 建设一个小说网站要多少钱站长工具seo综合查询烟雨楼
  • 做网站昆山网站开发语言有什么
  • 在哪能学到网站建设专业北京 建设官方网站
  • 网站风格确定网页翻译软件哪个好用
  • 上海建设银行官网网站6什么是网站设计与运营
  • 360免费wifi怎么连接杨和关键词优化
  • 东莞市建设监督网站智慧记免费官方下载
  • 增城百度做网站多少钱公司搭建网站模板
  • 什么网站做英语翻译练习有没有什么网站做泰国的东西
  • 商务网站建设摘要免费原创视频素材
  • 网站策划教程网站文字大小
  • 智能锁东莞网站建设软件工程开发
  • 正规的网站制作平台动力做网站
  • 网站建设对工厂意义免费ppt模板公众号
  • 嘉定区做网站做针织衫的网站
  • 河南阿里巴巴网站建设代理加盟项目
  • 文具网站建设平台搭建心得
  • 大兴企业官网网站建设报价计算机软件网站建设
  • 自动全屏网站模板物联网产品
  • 福田建网站外包认证网站源码
  • php装修网站源码ui设计工资
  • 网站分站原理怎么建立信息网站平台
  • 哪个网站用div做的好php网站开发工程师招聘会
  • 电商网站设计费用制作一个app软件