由于最近项目更新功能比较的忙,也没时间去整理自己的知识点和管理自己的博客.在Android对手机相册中的图片的压缩和上传到服务器上,这样的功能在每个app开发中都会有这样的需求.所以今天就对android 端怎么快速实现图片压缩和上传进行简单的分析. Throwable e) { } }).launch(); } // 压缩并上传至服务器 private void zipIcon(File file) { MultipartBody.Part formData = MultipartBody.Part.createFormData(Constant.AVATAR, "xxx.png", requestBody); //上传到服务器 // 这样得到formData文件 就可以通过上传文件的方式,上传到服务器上了. }
完整的前后端图片压缩上传,后台语言php ? <! for="xFile" class="btn btn-primary">选择图片</label> <button id="upload" class="btn btn-success">上传图片 " + err) }, success: function(result) { alert("上传成功"); }, }) php // 允许上传的图片后缀 header("Content-type: text/html; charset=utf-8"); $allowedExts = array("gif", "jpeg" ""; } else { echo "上传文件名: " . $_FILES["file"]["name"] . ""; echo "文件类型: " .
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
图片的上传一般情况下不需要上传大体积的图片,因为如果是用户头像或者是一些要求清晰度不是太高的场景上传大体积图片会很消耗资源,一个是上传耗时比较长,同时也增加了存储的开销,当展示的时候也会消耗下载的带宽, 要求用户上传的图片之前压缩图片很影响用户体验,所以就增加了在前端进行图片压缩的需求。 压缩方案 前端图片压缩的主要思路就是将图片绘制到canvas中,然后通过canvas的toDataURL方法来控制图片的质量,对图片进行压缩,另一方面是对图片进行宽高等比缩小来达到图片压缩的效果,下面来看一下代码示例 创建image对象 上面的示例说了图片压缩的过程,其中有一个参数是image对象,那么这个image对象是如何来的呢。 当压缩完成后返回的数据就是base64的数据了,我们就可以通过ajax异步来进行上传,在此我采用的是axios进行异步上传,将内容及文件名作为参数传递给后台。
首先是文件上传的代码: module.exports = { getUUID() { //生成UUID return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'. console.error } console.log(options) uni.uploadFile(options) }).catch(console.error) } } 然后是视频上传 +压缩 <script> const oss = require('@/utils/oss.js'); export default { methods: { upload(file, { ; console.log({ filePath }); // 上传完成结束回调 } }); }, onImage() { ,需要在上方compressed设置为false关闭默认上传压缩 // console.log('压缩前大小:: ', res.size / (1024 * 1024) + 'KB');
现在网上的高清原图尺寸也有好几M甚至更大,而且现在手机像素高了拍出来的照片也特别大,所以有时候需要对用户上传图片时进行压缩处理。 图片压缩的原理:将图片重新画入到canvas画布里面,再将canvas转成图片的形式。 Blob对象的形式,再上传。 上传压缩图片ajax部分代码: //dataURL转成Blob对象 function dataURLtoBlob(dataURI) { var byteString = atob(dataURI.split ia[i] = byteString.charCodeAt(i); } return new Blob([ab], {type: mimeString}); } //上传
<artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> 2、代码 /** * 上传图片 MultipartHttpServletRequest requestFile) throws IllegalStateException, IOException { log.info("*******************进入图片上传的方法 0, byteread); fs.flush(); } fs.close(); is.close(); } /** 处理源文件 ,进行压缩再放置到新的文件夹 0.2f).toFile(copyPath);//按比例缩小 File toFile = new File(copyPath); log.info("*******************上传图片大小 :"+toFile.length()+"*************************"); //ftp上传 String filePath = Common.getValue("FTP_REMOTE_FILEPATH
Stream即流的形式,比如我们上传网络图片。 Bitmap,就是我们通常指内存中图片的大小。 2. 什么是质量压缩? 应用场景:图片的上传。 3.什么是尺寸压缩? 图片的尺寸压缩是指:按照一定的倍数对图片减少单位尺寸的像素值,可以改变图片在内存中的大小,不改变图片在磁盘中的大小。 image.png 由于我们这里只讲图片的压缩,关于再次之前如何获取图片返回的URI和高低版本适配7.0等问题,我们这里不说,我之前写过文章,Android-图片的选择,裁剪,压缩,适配高版本,这里就不说了 image.png 质量压缩 那我们就先看bitmapCompress()这个质量压缩的方法。 demo上传github,地址:图片的质量和尺寸压缩
在具体业务中,我们会遇到需要让用户上传本地图片的场景,随着现在的手机像素越来越高,图片的大小也越来越大,上传原图后一方面是难以上传成功,另一方面是上传成功后在列表中图片太大加载时间过长或者加载失败。 若是直接提示用户 “无法上传xxM以上的图片” ,用户体验会不好,于是需要我们对用户上传的图片进行压缩。本文主要记录了开发过程中探索压缩图片的过程和方式,以及一些踩坑记录。 一、wx.chooseMedia拍摄或从手机相册中选择图片或视频,wx.chooseMedia中有一个sizeType属性,选择上传原图还是缩略图API官方链接:https://developers.weixin.qq.com 我们这次的需求主要是用户上传图片,然后在列表中展示,现在手机像素都挺好的,拍摄的图片都很大,并且也会有用户上传长截图,因此列表中的图片加载很慢,所以我综合了以上三种方式来实现压缩图片:判断系统为ios还是安卓 ,由用户选择,一方面利用好自带的压缩功能,另一方面如果图片宽高大于40000,安卓压缩后会超级模糊,这时候用户预览后可以自己选择重新上传原图;选择图片以后,wx.chooseMedia返回的tempFiles
现在手机用户拍照照片都十分巨大,1m-10m,而普通用户的上传带宽大概为100kb/s-1m/s,导致上传图片十分缓慢 解决方法为上传之前先把图片进行压缩,使得上传速度增加,服务器硬盘,带宽速度压力也更小 var mpImg = new MegaPixImage(file); // render方法的maxWith,maxHeight,以及quality都决定了压缩图片的质量 var resImg 压缩图片十分的耗时,尤其是多张图片一起的时候,所以需要稍微变换一下 fileSelected: function () { var files = $("#fileImage ,可以直接通过img标签的src属性进行取值上传,如 ? 将img的src值存到input进行直接的form表单上传 或者ajax获取值直接上传 后台代码为 if(!
场景: PNG图片在TinyPng上在线压缩后上传到公司的图床上,结果最终图片的质量从压缩后的50K变成了114K。 分析: 各个工具对PNG图片的压缩算法不一样,二次压缩时由于原始图片信息被修改,导致存在图片质量变大的情况。
由于Android本身的机制限定 由于系统对每个应用内存分配规则的限制,如果加载过大图片很有可能会导致OOM 即闪退或者卡屏现象 但是手机上拇指大小的图片,超清是王权没有必要的 这是我们就需要对 对片进行压缩处理 : 大多数人采用先生成bitmap对象,反复压缩bitmap至100k一下的方法,对图片进行反复压缩,但如果是超级大图,bitmap生成本身就已经会导致OOM,所以我们应先对bitmap进行设置: public ,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while ( baos.toByteArray().length / 1024 >100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();//重置baos即清空baos image.compress (Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 options -= 50;
Android Bitmap压缩方式分析 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理 ,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图。 在Android开发中我们都会遇到在一个100*100的ImageView上显示一张过大的图片,如果直接把这张图片显示上去对我们应用没有一点好处反而存在OOM的危险,所以我们有必要采用一种有效压缩方式来显示上去 (lastBitmap); mImageView.setImageBitmap(lastBitmap); } 通过打印log我们可以清楚发现一张原始的图片占有22317120字节,经过压缩后 heigthRatio : widthRatio; 计算压缩比例,取最小值 这将保证压缩出来的图片大于或者等于请求的宽度或者高度。
javascript"> var server = "http://192.168.1.199/uploaddemo/uploadmore.php"; var files = []; // 上传文件 function upload() { if(files.length <= 0) { plus.nativeUI.alert("没有添加上传文件!") if(status == 200) { alert("上传成功") console.log(t.url) //http appendByGallery() { plus.gallery.pick(function(p) { compress(p); appendFile(p); }); } //压缩图片 > 主要用到html5+拍照与压缩插件 在拍照成功后会返回图片保存的路径,如上面的p参数,在压缩图片时要用到p,overwrite: true不能省略。
Bitmap 的采样压缩(这个采样率是根据需求来进行生成的),使用到了inBitmap内存复用和 inJustDecodeBounds 采样的流程: 将 BitmapFactory.Options 的 /** * 采样率压缩,这个和矩阵来实现缩放有点类似,但是有一个原则是“大图小用用采样,小图大用用矩阵”。 * 也可以先用采样来压缩图片,这样内存小了,可是图的尺寸也小。 ,这里80表示80%不压缩,压缩20%,把压缩后的数据存放到baos中 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray ());//把压缩后的数据baos存放到ByteArrayInputStream中 BitmapFactory.Options options = new BitmapFactory.Options = null; System.gc(); } return compressBitmap; } /** * 采样压缩比例
前言 Android 上用 FTP上传文件 通常可以用以下的这两个Jar commons-net ftp4j 我这里就用第一种方式 第二种请参考通过FTP4J 实现FTP各种操作 使用方式 引用 // FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功 ftpClient.makeDirectory(remotePath); // 设置上传目录 outputstream.flush(); outputstream.close(); returnMessage = 1; //上传成功 Override protected void onPostExecute(Integer result) { if (result == 1) { //上传成功后调用
gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/xml ->文本-->压缩率会很高. gzip执行流程 post请求参数的形式 多张图片上传:写个循环,用键值,可以用BasicNameValuePair,也可以用file,循环添加,也可以用base64变成string 上传 Base64:byte[]-->string 上传图片,语音: 存对象到sp:如map iv = (ImageView) findViewById(R.id.iv); findViewById }); post的content-type application/x-www-form-urlencoded :表单类型-->key-value,默认 multipart/form-data :文件上传 initPostJsonString(jsonString); File file = new File(""); initPostFile(file); } /** * 文件的上传
null : uploadButton} </Upload> customRequest 自定义上传图片的 const uploadImage = async options err); const error = new Error('Some error'); onError({ err }); } }; beforeUpload 压缩图片在这一步操作 const beforeUpload = (file, fileList) => { return new Promise(resolve => { // 图片压缩 let 对象转化为图片文件 resolve(imgFile); }, file.type, 0.2 ); // file压缩的图片类型
WordPress 在图片上传后会默认压缩图片质量为原来的 90%,这样做的好处可以极大的加快页面的载入速度与缩小图片大小所占服务器空间。 如果希望 100% 原质量怎么办呢? 如何禁止 WordPress 自动压缩上传图片质量呢? 把如下代码插入到你的主题 functions.php 文件里,则以后不会对上传质量有所压缩了 add_filter( 'jpeg_quality', create_function( '', 'return 100;' ) ); 相反,希望图片压缩质量更高一些: add_filter( 'jpeg_quality', create_function( '', 'return 80;' ) ); 把以上代码后面的参数改成自己喜欢的压缩比例就可以了
image的尺寸 CGSize imagesize = imageNew.size; imagesize.height =626; imagesize.width =413; //对图片大小进行压缩 [picker dismissModalViewControllerAnimated:YES]; return ; } [picker release]; } //对图片尺寸进行压缩
图片处理(IP)是由腾讯云数据万象提供的功能丰富、低成本、高可靠的图片处理服务。图片处理支持灵活的图像编辑,并且提供 Guetzli 压缩、TPG 转码等图片瘦身解决方案,图片或文字水印、独有盲水印等版权保护解决方案,满足多种业务场景下的图片需求。
扫码关注腾讯云开发者
领取腾讯云代金券