发布网友 发布时间:2022-04-22 00:02
共5个回答
懂视网 时间:2022-05-12 03:54
本篇文章给大家带来的内容是关于canvas实现压缩图片的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。// 对图片进行压缩 function compress(imgPath) { var image = new Image(); //新建一个img标签(还没嵌入DOM节点) image.src = imgPath; image.onload = function() { var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); var imageWidth = image.width / 3; //压缩后图片的大小 var imageHeight = image.height / 3; var data = ''; canvas.width = imageWidth; canvas.height = imageHeight; context.drawImage(image, 0, 0, imageWidth, imageHeight); data = canvas.toDataURL('image/jpeg') //压缩完成 $(".srcDiscernImg").attr("src", data); console.log("渲染。。。。"); } }
本篇文章到这里就已经全部结束了,更多精彩内容大家可以关注PHP中文网的HTML5视频教程栏目!!!
热心网友 时间:2022-05-12 01:02
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。
照片是自己用单反拍的,5M多,压缩下面3张分别是600多kb,400多kb,300kb的最后那张失真度很大了,压缩效率蛮高的。
<!DOCTYPE html>
<html><head><meta charset="utf-8"/><title>File API Test</title><script type="text/javascript" src="js/jquery-1.11.0.min.js"></script><script type="text/javascript" src="js/JIC.js"></script><style>#test{display: none;}</style></head><body><input type="file" id="fileImg" ><form><img src="" id="test" alt=""></form><script>function handleFileSelect (evt) {// var filebtn = document.getElementById(id);// console.log(filebtn);// var files = filebtn.target.files;// console.log(filebtn.target);// console.log(files);var files = evt.target.files;for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. // console.log(evt.target.files[0]); // console.log(e.target); console.log(e.target.result); var i = document.getElementById("test"); i.src = event.target.result; console.log($(i).width()); console.log($(i).height()); $(i).css('width',$(i).width()/10+'px'); //$(i).css('height',$(i).height()/10+'px'); console.log($(i).width()); console.log($(i).height()); var quality = 50; i.src = jic.compress(i,quality).src; console.log(i.src); i.style.display = "block"; }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('fileImg').addEventListener('change', handleFileSelect, false);</script></body></html>
var jic = { /** * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed * @param {Image} source_img_obj The source Image Object * @param {Integer} quality The output quality of Image Object * @return {Image} result_image_obj The compressed Image Object */ compress: function(source_img_obj, quality, output_format){ var mime_type = "image/jpeg"; if(output_format!=undefined && output_format=="png"){ mime_type = "image/png"; } var cvs = document.createElement('canvas'); //naturalWidth真实图片的宽度 cvs.width = source_img_obj.naturalWidth; cvs.height = source_img_obj.naturalHeight; var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0); var newImageData = cvs.toDataURL(mime_type, quality/100); var result_image_obj = new Image(); result_image_obj.src = newImageData; return result_image_obj; }, function ****(***)
热心网友 时间:2022-05-12 02:20
这个不行吧,js 似乎做不到,你可以放两张图,用 css 的媒体查询,或 js 对浏览器 BOM 判断,或对读取显示屏的宽度判断用小图还是用大图。
如下面的代码,这个个十分全面的 js 判断浏览器是否为移动硬件上,如果 isMobile() == true 那么就是移动设备,这时用读那个小图的 URL,
// http://detectmobilebrowsers.com/ 我改了一点,方便使用热心网友 时间:2022-05-12 03:55
客户端的js是没办法改图片分辨率的,服务器端的node.js应该可以,但是这个环境好多主机都不提供,你自己有服务器权限能安环境,肯折腾才行。
压缩更改图片实际大小一般都是后台程序干的事..
热心网友 时间:2022-05-12 05:46
试下这个