上传时压缩图片-Picdict
上一篇:网站速度测试、分析
上篇文章推荐了大家一款可以测试网页速度,定位网站优化方向的工具------PageSpeed,看我文章的想必都看到了,我的网页首要优化提升速度的就是提供压缩后的图片,所以我就找压缩工具,但是我的网站就是图片偏重,所以不能每次都让运营人员自己压缩后上传吧,添加人家的工作量,最好可以上传图片时直接压缩,我就去百度了一个压缩图片的软件,
首先是tinypng压缩,这个压缩大家可以看官网的介绍,在这里详细介绍的是另外一个压缩软件:Picdict压缩
简介
Picdiet是一款功能强大,超快速的在线批量图像优化器和压缩器。所有图像压缩仅在本地浏览器中处理,无需任何服务器或API要求。这意味着您无需将图像上传到云端即可获得最快的压缩速度,你要是想在线压缩的话,那肯定完全免费的,可是想要集成于自己项目,还是要付费的,大家可以进Picdict官网查看一下。本仙女也是调查了好久,才找到了一个不需要的办法,那就是我直接把需要购买的js文件给你,渠道可以是留言发邮件,也可以是直接加微信,邮箱为18437975210@163.com,微信为:verymexia。下面是具体集成与项目的步骤
集成于项目
官网里面是有集成项目的文档的,这里我就不说太多,直接上代码
. 当然了,首先是html的布置
<div class="am-form-group"><label for="user-weibo" class="am-u-sm-3 am-form-label">封面图 <spanclass="tpl-form-line-small-title">3:4比例</span></label><div class="am-u-sm-9"><div class="am-form-group am-form-file"><div class="tpl-form-file-img"><img alt="" id="showimg_3_4" style=" display: none;"/><img id='ori_img_3_4' class="item hide" /></div><button type="button" class="am-btn am-btn-danger am-btn-sm picdiet" data-imgtype="3_4" data-accept=".jpg, .jpeg,.png,.gif" data-multiple="1" data-quality="75" data-maxwidth="1200" data-callback="uploadimage"><i class="am-icon-cloud-upload"></i> 添加封面图片</button><span style="color:#D93D37; font-weight:bold;"> (图片尺寸:210 * 280)</span><input type="hidden" name="picture_3_4" id="rar_picture_3_4" style="display: none" />{{--压缩图片--}}<input type="hidden" name="ori_picture_3_4" id="ori_picture_3_4"style="display: none" />{{--原图片--}}</div></div></div>
记住,就像手册里说的,一定要给你要点击添加图片的按钮绑定类名为picdiet,支持打开的图片格式有“.jpg, .jpeg,.png,.gif”(虽然picdiet.js支持打开此类型图片,但只对jpg、jpeg和png进行压缩、缩放和裁剪,其它格式则跳过处理),支持多文件上传,图片压缩品质为75%,当图片宽度超过1200px时,则先缩放图片再压缩,压缩完成后,执行uploadimage函数等,这里需要指出的就是这个图片压缩品质data-quality,data-quality=75%,就是说压缩后的图片时原图片的75%,这个比例是最好的,图片质量不会降低太多,但图片大小却能减小很多,所以建议使用这个,你也可以使用其他百分比,data-callback是图片选择后需要执行的函数,就是执行uploadimage这个函数,不必更改,你的需要提交的ajax保存图片的代码也只需要放在这个函数里面就好。
其次是uploadimage函数的实现,你的js要实现的代码也可以放在这里实现
<script type="text/javascript">/*
* 当图片的缩放、裁剪、压缩完成后,系统将调用此函数,并传入以下3个值
* @param dom 绑定的上传按钮对象
* @param blob 图片压缩处理完成后生成的blob对象
* @param file 从文件上传的标签获得的file原始对象
*/function uploadimage(dom,blob,file) {var index = dom.getAttribute('data-imgtype');var reader = new FileReader();reader.onload = function (e) {var data = e.target.result;//加载图片获取图片真实宽度和高度var image = new Image();image.onload=function(){window.boxW = image.width;window.boxH = image.height;$('#showimg_'+index).height(boxH)$('#showimg_'+index).width(boxW)};image.src= data;};reader.readAsDataURL(file);$('#showimg_'+index).show();var formData = new FormData();formData.append('rar_file', blob);formData.append('ori_file', file);formData.append('filename', file.name);rar_upload("{{ Route('rarupload') }}",formData,index);}
</script>
对于这个传递图片到后台接受的,可以看一下,是创建了一个表单对象FormData,通过给这个表单添加属性,然后图片信息到指定的路由,在这里只是创建了表单对象,关于提交到后台的代码,由另外一个js方法实现,叫rar_upload()方法,它需要三个参数,一个是路由,一个是需要提交的表单数据,这里第三个参数index只是为了在提交后可以让对应的图片显示出来,起到识别图片的作用,可以好好看看这个处理文件的流程,都是对于文件的处理,方便后续传递图片信息
与后台交互功能的实现:rar_upload()
下面是与后台交互,传递图片信息的方法:
/**压缩图片的上传
*
* */
function rar_upload(url,formData,index) {$.ajax({type: "POST",url: url, //同目录下的php文件data:formData,dataType:"json", //声明成功使用json数据类型回调//如果传递的是FormData数据类型,那么下来的三个参数是必须的,否则会报错cache:false, //默认是true,但是一般不做缓存processData:false, //用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型contentType:false, //一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为falsesuccess: function(result){ //请求成功后的回调函数$("#showimg_"+index).attr('src', result.datalist['rar_img']);$("#ori_img_"+index).attr('src', result.datalist['ori_img']);$("#rar_picture_"+index).val(result.datalist['rar_img']);$("#ori_picture_"+index).val(result.datalist['ori_img']);}});return ;
}
这里就不用做太多的介绍了,就ajax提交后台数据的操作
**注意:**ajax提交的数据data,是uploadimage处理后的数据,是文件类型的
后台接收,处理,保存图片路径
大家这时候肯定纠结怎么在后台获取到ajax提交过来的图片,手册里面也指出了以PHP为例的接收数据的代码,
<?php$extension=pathinfo($_POST['filename'],PATHINFO_EXTENSION);if(in_array($extension,array('jpg','jpeg','png','gif','bmp'))){$image_content = file_get_contents($_FILES['file']['tmp_name']);$store_name=uniqid().'.'.$extension;file_put_contents($store_name,$image_content);$size=getimagesize($store_name);if($size[0]>0 && $size[1]>0 && $size[0]<=1200) //二次校验宽度是否在预设值1200px范围内{echo '存储的文件名为:'.$store_name;}else{unlink($store_name);}}?>
,大家可以看一下,使用file_get_contents获取数据,获取到的数据是二进制的流,如下图所示
所以获取后要数据写进文件里面,文件的后缀名,则取决于你上传时选择的图片的类型,下面的就是功能的上的保存图片链接进库功能了,完成!
正事说完了,在这里帮忙宣传一个日用百货的店铺:‘我虽然资历尚浅,但质量绝对保证,价格绝对良心’
店铺名称:98K杂货店,点击进店铺,欢迎选购哟,说明了解来源可以优惠!!!
上传时压缩图片-Picdict相关推荐
- java压缩图片比例quality_Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】...
本文实例讲述了java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; ...
- java上传并压缩图片(等比例压缩或者原尺寸压缩)
先看效果: 原图:1.33M 处理后:27.4kb 关键代码; package codeGenerate.util;import java.awt.Color; import java.awt.Gra ...
- java等比压缩图片_java上传并压缩图片(等比例压缩或者原尺寸压缩)
先看效果: 原图:1.33M 处理后:27.4kb 关键代码; package codeGenerate.util; import java.awt.Color; import java.awt.Gr ...
- PHP 上传并压缩图片
步骤如下: 文件上传基本操作咯 在上传之前,处理图片(当然,也有可能是上传图片之后,在生成缩略图 ,看自己需求了) 保存压缩后的图片 大致步骤就是这样,具体如下: 文件上传操作 这里省略了,之前写过一 ...
- Android头像上传时裁剪图片过大问题,裁剪大图片导致
原先在完成头像上传功能的时候复制网上写好的代码,虽然也仔细研究过实现的过程但是这次项目中却遇到了一个很不解的问题,使用乐视手机实现图片裁剪的那一步骤中由于图片太大手机性能不够导致图片无法裁剪报出错误 ...
- vant上传图片时压缩图片
vant上传图片,有图片的宽高大小限制,可以上传时压缩图片,在这里记录一下. 压缩图片大小 afterRead(file){console.log(file,'0000')this.face = [] ...
- 【报错笔记】关于图片上传时的路径问题
在图片上传时将图片上传到本地磁盘后 如下将图片保存到了D盘下 因此在jsp页面中读取对应图片时,需要在tomcat中配置相关信息. 在jsp页面中图片路径src中使用虚拟路径加数据库中图片名称就可以将 ...
- php 更改图片后缀名,PHP在图片上传时如何改变图片后缀为jpg
PHP在图片上传时改变图片后缀为jpg的方法:首先获取上传的图片后缀,并获取图片在电脑上的临时存储位置:然后获取临时存储文件的后缀:最后实现后缀转换,代码为[case 'im{ / S # p |ag ...
- linux禁止客户端上传文件_图片/文件上传如此简单|macOS 图床客户端 uPic
前言 相信很多人在写作(特别是需要多平台发布)的时候都会因为插图而增加工作量: 平台图片外链不允许在网站外部访问. 使用云图床服务上传流程复杂. 那么这些问题有没有办法解决呢,答案肯定是"有 ...
最新文章
- Palindrome Linked List
- 关于年终奖励的扣税算法BUG
- collection包下Counter类统计list中各个元素出现的次数
- 决定以太坊未来的三个关键扩容项目
- vim编程 插入 保存不退出 保存退出 退出不保存 另存为其他文件名 保存覆盖现有文件...
- 软件行业为什么那么多项目经理
- fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
- 当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性
- 关于 “Makefile:3:***遗漏分隔符。停止 。”解决方法二
- ContextAttribute类
- Ubuntu 16.04 下安装运行 Suricata
- macOS镜像下载(ISO、DMG)
- 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
- 雷林鹏分享:PHP 创建 MySQL 表
- cannot find -lGL问题的解决方法
- 通过手机使用广域网访问局域网的服务器
- 东八区转为0时区_什么叫0时区
- CANOE使用三:不用diva也能自动化测试UDS(创建TestModule-搭配Panel界面及使用Capl识别配置文件TXT编写基于14229的UDS自动化测试流程)
- windows命令行工具连接mysql数据库报ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)
- OSPF多区域配置实验