前端 - 将非 jpeg 格式图片转为 jpeg 格式、压缩图片

将非 jpeg 格式图片转为 jpeg 格式

/common/compressImage/convertImage

// 思路是创建一个图片,将file等于这个图片,然后创建一个canvas图层 ,将canvas等比例缩放,
//然后用canvas的drawImage将图片与canvas合起来,然后在把canvas的base64转成file即可
export default function ConvertImage(file) {
	return new Promise((resolve, reject) => {
		const fileName = file.name.substring(0, file.name.indexOf('.'))
		let reader = new FileReader() //读取file
		reader.readAsDataURL(file)
		reader.onloadend = function (e) {
			let image = new Image() //新建一个img标签(还没嵌入DOM节点)
			image.src = e.target.result //将图片的路径设成file路径
			image.onload = function () {
				let canvas = document.createElement('canvas'),
					context = canvas.getContext('2d'),
					imageWidth = image.width,
					imageHeight = image.height,
					data = ''
				canvas.width = imageWidth
				canvas.height = imageHeight

				context.drawImage(image, 0, 0, imageWidth, imageHeight)
				data = canvas.toDataURL('image/jpeg')
				var newfile = dataURLtoFile(data, fileName + '.jpeg')
				resolve(newfile)
			}
		}
	})
}
function dataURLtoFile(dataurl, filename) {
	// base64转file对象
	let arr = dataurl.split(','),
		mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]),
		n = bstr.length,
		u8arr = new Uint8Array(n)
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n)
	}
	return new File([u8arr], filename, { type: mime }) //转成了jpeg格式
}

压缩图片

/common/compressImage/compressorjs.js

import Compressor from 'compressorjs' // npm 下载包

/**
 * @param image 图片
 * @param backType 需要返回的类型blob,file
 * @param quality 图片压缩比 0-1,数字越小,图片压缩越小
 * @returns
 */
export default function ImageCompressor(image, backType, quality) {
	return new Promise((resolve, reject) => {
		new Compressor(image, {
			quality: quality || 0.6,
			success(result) {
				let file = new File([result], image.name, { type: image.type })

				if (!backType || backType === 'blob') {
					resolve(result)
				} else if (backType === 'file') {
					resolve(file)
				} else {
					resolve(file)
				}
			},
			error(err) {
				console.log('图片压缩失败---->>>>>', err)
				reject(err)
			},
		})
	})
}

使用(小程序有问题)

使用1:封装方法

async getUrl(file) {
  this.isShowLoading = true;
  for (let i = 0; i < file.length; i++) {
    let img = file[i];

    const fileType = img.name.substring(img.name.indexOf(".") + 1);
    // 判断文件是不是jpeg 不是jpeg的都转成jpeg
    if (!["jpeg", "jpg"].includes(fileType)) {
      img = await ConvertImage(img); //转陈jpeg格式的file
    }
    let newImg = await ImageCompressor(img, "file", 0.6); //图片压缩
    // newImg 压缩后文件 File
  }
},

以上来源

使用2:不封装方法,直接用

<script>
// ...
import ImageCompressor from "../../common/compressImage/compressorjs.js";
import ConvertImage from "../../common/compressImage/convertImage";

export default {
  name: "addCar",
  methods: {
    jszxszUpload(type) {
      uni.chooseImage({
        success: async (imageRes) => {
          let bool = true;
          if (imageRes.tempFiles[0].type) {
            if (
              !["image/jpeg", "image/jpg", "image/png", "image/heic"].includes(
                imageRes.tempFiles[0].type
              )
            ) {
              bool = false;
            }
          } else {
            const imgTypeStr = "jpeg, jpg, png, heic";
            const type = imageRes.tempFilePaths[0].split(".")[1];
            if (imgTypeStr.indexOf(type.toLowerCase()) < 0) {
              bool = false;
            }
          }
          if (!bool) {
            uni.showLoading({
              title: "请上传 jpeg、jpg、png、heic 格式图片",
              icon: "none",
            });
            setTimeout(function () {
              uni.hideLoading();
            }, 2000);
            return;
          }

          let fileBase64 = "";
          //#ifdef H5
          /** ** 图片压缩 start ****/
          let img = imageRes.tempFiles[0];
          const fileType = img.name.substring(img.name.indexOf(".") + 1);
          if (!["jpeg", "jpg"].includes(fileType)) {
            img = await ConvertImage(img); // 转为 jpeg 格式的 file
          }
          let newImg = await ImageCompressor(img, "file", 0.6); //图片压缩
          /** ** 图片压缩 end ****/
          fileBase64 = await this.toBase64(newImg);
          //#endif

          //#ifdef MP-WEIXIN 
          // 【注意】小程序中使用该方法转换图片格式/压缩图片有很多问题,此处代码有误,得找其他解决办法
          /** ** 图片压缩 start ****/
          let imgBlob = imageRes.tempFilePaths[0];
          const fileTypeBlob = imgBlob.name.substring(
            imgBlob.name.indexOf(".") + 1
          );
          if (!["jpeg", "jpg"].includes(fileTypeBlob)) {
            imgBlob = await ConvertImage(imgBlob); // 转为 jpeg 格式的 file
          }
          let newImgBlob = await ImageCompressor(imgBlob, "blob", 0.6); //图片压缩
          /** ** 图片压缩 end ****/
          fileBase64 = await this.downloadAndConvert(newImgBlob);
          //#endif

          // ... 以 base64 格式上传图片 fileBase64
        },
      });
    },
    // 文件转base64
    toBase64(file) {
      return new Promise((resolve, reject) => {
        const fileReader = new FileReader();
        fileReader.onload = (e) => {
          resolve(e.target.result);
        };
        fileReader.readAsDataURL(file);
        fileReader.onerror = () => {
          reject(new Error("文件流异常"));
        };
      });
    },
  },
};
</script>

注:小程序图片格式转换、压缩图片
https://alexcorvi.github.io/heic2any/
https://github.com/catdad-experiments/heic-convert
heic转成其他格式;也同时可以压缩的;有个质量属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用图像处理软件或在线工具将PNG图片转换为HEIF格式。步骤如下: 1. 打开图像处理软件,例如Adobe Photoshop。 2. 选择要转换的PNG图片,然后点击“文件”菜单中的“保存为”选项。 3. 选择HEIF格式,并确保选择了正确的参数(例如图像质量)。 4. 按照提示保存文件即可。 如果您不想使用图像处理软件,也可以使用在线工具将PNG图片转换为HEIF格式。您可以搜索“在线PNG到HEIF转换器”,找到合适的工具,并按照提示上传和转换您的图像即可。 ### 回答2: 将PNG图片转换为HEIF格式可以通过以下步骤进行: 1. 下载并安装图像转换工具:你需要下载并安装一个支持转换HEIF格式的图像转换工具,比如XnConvert、Adobe Photoshop等。 2. 打开图像转换工具:运行图像转换工具并选择打开PNG图像文件。 3. 设置输出格式为HEIF:在图像转换工具中,找到输出格式选项,选择HEIF作为输出格式。 4. 调整图像参数(可选):你可以根据需要调整一些图像参数,如图像质量、分辨率等。这些参数根据不同的图像转换工具可能会略有不同。 5. 开始转换:点击开始转换或保存按钮,开始将PNG图像转换为HEIF格式。这个过程可能需要一些间,具体取决于你的图像大小和计算机性能。 6. 保存HEIF图像:在转换完成后,选择保存HEIF图像到你指定的目录。 注意事项: - 在转换PNG图像为HEIF格式,一些图像细节可能会发生变化,所以最好在转换后进行一次检查,确保图像质量符合预期。 - 某些图像转换工具可能需要付费购买才能支持HEIF格式的转换,所以在选择转换工具要注意。 ### 回答3: 将PNG图片转换为HEIF格式有多种方法,以下是一种常用的方法: 首先,你可以从互联网上下载一个专门的软件来进行转换。一些可用的软件包括HEIC Converter、iMazing HEIC Converter等。下载并安装软件后,打开软件界面。 然后,将你想要转换的PNG图片拖拽到软件的界面上,或者点击软件界面上的添加图像按钮选择图片。 接下来,设置输出选项。这些选项通常包括选择输出文件夹、重命名输出文件、调整压缩质量等。根据你的需求进行选择和调整。 最后,点击开始转换按钮开始转换过程。等待软件将PNG图片转换为HEIF格式,转换间取决于图片的大小和软件的性能。 转换完成后,你可以在输出文件夹中找到转换后的HEIF格式图片。你可以使用任何支持HEIF格式的设备或软件来打开和查看这些图片。 需要注意的是,HEIF格式图片相对于PNG格式图片,可以更有效地压缩图像,减小文件大小。此外,不是所有的设备和软件都支持HEIF格式,因此,在使用HEIF格式需要确保其兼容性与可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值