123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /**
- * @description 图片处理方法
- * */
- export default {
- /**
- * @description 获取图片信息
- * @param {string} src 地址
- * @return {number}
- * */
- getImageInfo(src) {
- return new Promise((resolve, reject) => {
- if (!src) {
- reject('图片地址不能为空!');
- }
- uni.getImageInfo({
- src,
- success(res) {
- // #ifdef MP-ALIPAY
- res.errMsg = 'getImageInfo:ok';//支付宝小程序直接 返回图片信息 没有 ‘getImageInfo:ok’
- // #endif
- if (res.errMsg === 'getImageInfo:ok') {
- resolve(res);
- } else {
- reject('获取图片信息失败!');
- }
- },
- fail(err) {
- reject('调取获取图片接口失败!');
- }
- });
- });
- },
- /*选取图片*/
- chooseImage({count = 9, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera']}
- = {count: 9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera']}) {
- return new Promise((resolve, reject) => {
- uni.chooseImage({
- count,
- sizeType,
- sourceType,
- success(res) {
- console.log(res)
- if (res.errMsg === 'chooseImage:ok') {
- resolve(res.tempFilePaths);
- } else {
- reject('选取图片失败');
- }
- },
- fail(err) {
- console.log('error',err)
- reject('取消选取图片');
- }
- });
- });
- },
- /*图片预览
- * path 图片下标 或路径
- * imgs 图片集合
- * */
- previewImage(path, imgs) {
- uni.previewImage({
- current: path,
- urls: imgs
- });
- },
- /*压缩图片*/
- /*图片转base64*/
- /*图片转本地临时路径blob*/
- img2blob() {
- }
- /*图片截取*/
- /*图片转base64*/
- , img2base64(path) {
- return new Promise(((resolve, reject) => {
- if (path.includes(';base64,')) {
- resolve(path)
- return;
- }
- // #ifdef H5
- window.URL = window.URL || window.webkitURL;
- var xhr = new XMLHttpRequest();
- xhr.open("get", path, true);
- // 至关重要
- xhr.responseType = "blob";
- xhr.onload = function () {
- if (this.status == 200) {
- //得到一个blob对象
- var blob = this.response;
- console.log("blob", blob)
- // 至关重要
- let oFileReader = new FileReader();
- oFileReader.onloadend = function (e) {
- let base64 = e.target.result;
- resolve(base64)
- };
- oFileReader.readAsDataURL(blob);
- }
- }
- xhr.send();
- // #endif
- // #ifdef MP-WEIXIN
- uni.getFileSystemManager().readFile({
- filePath: path,
- encoding: 'base64',
- success: function (data) {
- let path = 'data:image/jpeg;base64,' + data.data;
- resolve(path)
- },
- fail() {
- reject('图片转base64失败')
- }
- });
- // #endif
- // #ifdef APP-PLUS
- plus.io.resolveLocalFileSystemURL(path, (entry) =>{
- entry.file( (e)=> {
- let fileReader = new plus.io.FileReader();
- fileReader.onload = function(r){
- resolve(r.target.result)
- }
- fileReader.readAsDataURL(e)
- })
- })
- // #endif
- }))
- },
- /**
- * @description 缩放图片
- * @param img_size {number} 原图大小
- * @param img_width {number} 原图宽度
- * @param img_height {number} 原图高度
- * @param img_zoom_size {number} 缩放后的图大小 kb
- * @param max_width_or_height {number} 缩放后的最大高
- * @return re {object} 返回图片的尺寸信息
- * */
- imgZoom({img_size, img_width, img_height, img_zoom_size, max_width_or_height}) {
- let re = {width: img_width, height: img_height};
- if (img_zoom_size) {
- /*如果需要压缩的大小大于原大小则不处理*/
- if (img_zoom_size >= img_size) {
- return re;
- }
- /*压缩倍数*/
- let beis = img_size / img_zoom_size;
- /*根据压缩设置压缩宽高*/
- re.width = Math.ceil(img_width / beis);
- re.height = Math.ceil(img_height / beis);
- } else if (max_width_or_height) {
- let max_size = Math.max(img_width, img_height);
- if (max_width_or_height >= max_size) {
- return re;
- }
- /*压缩倍数*/
- let beis = max_size / max_width_or_height;
- re.width = Math.ceil(img_width / beis);
- re.height = Math.ceil(img_height / beis);
- }
- return re;
- },
- base642Blob(dataURI) {
- var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; // mime类型
- var byteString = atob(dataURI.split(',')[1]); //base64 解码
- var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
- var intArray = new Uint8Array(arrayBuffer); //创建视图
- for (var i = 0; i < byteString.length; i++) {
- intArray[i] = byteString.charCodeAt(i);
- }
- return new Blob([intArray], {type: mimeString});
- },
- /*压缩图片指定大小*/
- compressImg(url, canvas_id, width = 100, height = 100, self) {
- return new Promise((resolve, reject) => {
- /*加上延迟 处理h5 防止为改变dome 大小就开始绘制 会出现图片显示不完整*/
- setTimeout(()=>{
- const ctx = uni.createCanvasContext(canvas_id, self);
- console.log(ctx, url, canvas_id, width, height, self)
- ctx.setFillStyle('#fff')
- ctx.fillRect(0, 0, width, height)
- ctx.drawImage(url, 0, 0, width, height );
- ctx.draw(false, () => {
- setTimeout(() => {
- uni.canvasToTempFilePath({
- x:0,
- y:0,
- canvasId: canvas_id,
- width: width,
- height: height,
- destWidth: width,
- destHeight: height,
- success: (res) => {
- // #ifdef H5
- // document.querySelector('canvas').toBlob( (fileSrc)=> {
- // console.log(888,fileSrc)
- // let imgSrc = window.URL.createObjectURL(fileSrc)
- // resolve(imgSrc)
- //
- // })
- resolve(res.tempFilePath)
- // resolve(URL.createObjectURL(this.base642Blob(res.tempFilePath)))
- // #endif
- // #ifndef H5
- resolve(res.tempFilePath)
- // #endif
- },
- fail: (err) => {
- console.log(err)
- }
- }, self)
- }, 500)
- })
- },500)
- })
- }
- };
|