Cet article présente principalement la méthode de compression d'image en JS, y compris la méthode js de compression d'images dans des proportions égales. Les amis qui s'intéressent à js peuvent se référer à cet article
Tout d'abord, réfléchissez à ce que nous avons. avez-vous besoin? La plupart du temps, nous devons compresser un objet File, puis le transformer en objet File et le transmettre au serveur d'images distant ; parfois, nous devons également compresser une base64String et puis transformez-le en base64 La chaîne est transmise à la base de données distante, parfois il peut s'agir d'un canevas, ou d'un objet Image, ou directement de l'adresse URL d'une image. Nous devons les compresser et les télécharger vers la base de données distante. tant de demandes, Wang Er a simplement fait un dessin :
Texte alternatif
2. Solution
Comme le montre l'image ci-dessus, Wang Er a écrit un total de sept méthodes, qui couvrent essentiellement la conversion et la compression de la plupart des types de fichiers en JS, parmi lesquelles :
1. fn) L'objet image requis sera chargé via une URL, où le paramètre url est passé dans l'url de l'image, et fn est la méthode de rappel, qui contient les paramètres d'un objet Image. Le code est le suivant :
function urltoImage (url,fn){ var img = new Image(); img.src = url; img.onload = function(){ fn(img); } };
function imagetoCanvas(image){ var cvs = document.createElement("canvas"); var ctx = cvs.getContext('2d'); cvs.width = image.width; cvs.height = image.height; ctx.drawImage(image, 0, 0, cvs.width, cvs.height); return cvs ; };
function canvasResizetoFile(canvas,quality,fn){ canvas.toBlob(function(blob) { fn(blob); },'image/jpeg',quality); };
methods.canvasResizetoDataURL = function(canvas,quality){ return canvas.toDataURL('image/jpeg',quality); };
function filetoDataURL(file,fn){ var reader = new FileReader(); reader.onloadend = function(e){ fn(e.target.result); }; reader.readAsDataURL(file); };
function dataURLtoImage(dataurl,fn){ var img = new Image(); img.onload = function() { fn(img); }; img.src = dataurl; };
function dataURLtoFile(dataurl) { var 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 Blob([u8arr], {type:mime}); };
3. Encapsulation supplémentaire
Pour compresser un objet File puis le transformer en objet File, nous pouvons réencapsuler la méthode ci-dessus, référez-vous au code suivant :function fileResizetoFile(file,quality,fn){ filetoDataURL (file,function(dataurl){ dataURLtoImage(dataurl,function(image){ canvasResizetoFile(imagetoCanvas(image),quality,fn); }) }) }
var file = document.getElementById('demo').files[0]; fileResizetoFile(file,0.6,function(res){ console.log(res); //拿到res,做出你要上传的操作; })
ps : Voyons comment compresser des images avec le ratio JS
function proDownImage(path,imgObj) { // 等比压缩图片工具 //var proMaxHeight = 185; var proMaxHeight=300; var proMaxWidth = 175; var size = new Object(); var image = new Image(); image.src = path; image.attachEvent("onreadystatechange", function() { // 当加载状态改变时执行此方法,因为img的加载有延迟 if (image.readyState == "complete") { // 当加载状态为完全结束时进入 if (image.width > 0 && image.height > 0) { var ww = proMaxWidth / image.width; var hh = proMaxHeight / image.height; var rate = (ww < hh) ? ww: hh; if (rate <= 1) { alert("imgage width*rate is:" + image.width * rate); size.width = image.width * rate; size.height = image.height * rate; } else { alert("imgage width is:" + image.width); size.width = image.width; size.height = image.height; } } } imgObj.attr("width",size.width); imgObj.attr("height",size.height); }); }
Résumé
Ce qui précède est un résumé des méthodes de compression d'images en JS présentées par l'éditeur. J'espère que cela sera utile. à tout le monde ! Recommandations associées :Images téléchargées compressées JS
exemple de code d'effet de commutation manuelle du carrousel d'images js
Exemple de préchargement d'image JS
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!