其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上找到了:
http://www.oschina.net/question/814955_115750
然后,图片压缩后显示出来了,但是要保存,所以还需要进行处理,然后看到了另外一篇文章:
http://www.nowamagic.net/php/php_CreateJpg.php
这里就将这篇文章转载回来了,具体原文如下:
imagejpeg() 从 image 图像以 filename 为文件名创建一个 JPEG 图像。image 参数是 imagecreatetruecolor() 函数的返回值。
1 |
bool imagejpeg ( resource image [, string filename [, int quality]] ) |
filename 参数为可选,如果省略,则原始图像流将被直接输出。要省略 filename 参数而提供 quality 参数,使用空字符串('')。通过 header() 发送 Content-type: image/jpeg 可以使 PHP 脚本直接输出 JPEG 图像。JPEG 支持仅在 PHP 与 GD-1.8 或更高版本一起编译时可用。
quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约 75)。
程序示例
2 |
Header("Content-type: image/jpeg"); |
3 |
$im = imagecreatefromjpeg("./test.jpg"); |
假如有如下需求,用户上传的图片,我需要将它的图片质量降低到70%左右,可以缺省 filename 参数,然后指定原始图片与quality的值即可。当然你可以指定第二个参数作为新生成图片的文件名。
05 |
if(isset($_FILES['watermarkee']) && $_FILES['watermarkee']['error']==0)\ |
07 |
$original = $_FILES['watermarkee']['tmp_name']; |
09 |
$resultImage = imagecreatefromjpeg($original); |
12 |
$target_name = date('YmdHis').'_'.preg_replace('`[^a-z0-9-_.]`i','',$_FILES['watermarkee']['name']); |
13 |
$target = dirname(__FILE__).'/results/'.$target_name; |
16 |
imagejpeg($resultImage, $target, $quality); |
这里谈一下 imagecreatefromjpeg() 函数。
表单上传至服务器后,会产生$_FILES数组。如果数据有效。
01 |
$_FILES['userfile']['name'] |
04 |
$_FILES['userfile']['type'] |
05 |
// 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值 |
07 |
$_FILES['userfile']['size'] |
10 |
$_FILES['userfile']['tmp_name'] |
13 |
$_FILES['userfile']['error'] |
15 |
$_FILES['userfile']['tmp_name'] |
16 |
// 临时文件已经可以作为有效的jpeg文件进行处理了。但最终通过image一系列函数处理的图像,最终的存储是要移动至目标目录的 |
18 |
imagecreatefromjpeg($_FILES['userfile']['tmp_name']) // 即可生成有效的image资源 |
一段上传jpg图片,服务器端保存原图片和缩略图,并显示缩略图的方法。
03 |
function thumbnail($filename, $newWidth, $imgName) |
05 |
list ( $width, $height ) = getimagesize ( $filename ); |
06 |
$newHeight = $height / ($width / $newWidth); |
07 |
$newImage = imagecreatetruecolor ( $newWidth, $newHeight ); |
08 |
$oldImage = imagecreatefromjpeg ( $filename ); |
09 |
imagecopyresampled ( $newImage, $oldImage, 0, 0, 0, 0, $newWidth, $newHeight, $width,$height ); |
12 |
header ( 'Content-type: image/jpeg' ); |
13 |
imagejpeg ( $newImage, $imgName, 99 ); |
14 |
//imagedestroy ( $filename ); //若不用于显示则不用该方法。 |
18 |
function uploadImageFiles() |
20 |
$uploaddir = getcwd () . "/uploads/"; |
21 |
$uploadfile = $uploaddir . $_FILES ["upfile"] ["name"]; |
23 |
if ($_FILES ["upfile"] ["size"] > 5000000) |
25 |
echo "<script language='javascript'>alert('上传文件不得大于5M!');history.go(-1)</script>"; |
29 |
if ($_FILES ["upfile"] ["type"] != "image/gif" and $_FILES ["upfile"] ["type"] !="image/pjpeg") |
31 |
echo "<script language='javascript'>alert('上传文件类型必须是gif/jpeg/jpg格式!');history.go(-1)</script>"; |
35 |
$this->thumbnail ( $_FILES["upfile"]["tmp_name"], 100, $uploaddir . "miniImg/" .$_FILES ["upfile"]["name"] ); |
36 |
if (move_uploaded_file ( $_FILES ["upfile"] ["tmp_name"], $uploadfile )) |
39 |
echo "<img src=\"uploads/miniImg/" . $_FILES ["upfile"] ["name"] . "\"/>"; |
其实经过以上的学习后,我单独做了一个图片压缩的没什么问题,但是整合到我用的系统中时始终不行,为此还特地在OSC上发了帖子(依然是关于“PHP图片压缩的返回地址”问题):
http://www.oschina.net/question/59519_142458
最后也解决了,实际上很简单,还是没有好好读PHP的关于这个图片处理的手册,最后掉了一个imagedestory函数。
p.s. csdn这个功能不错,我直接覆盖上面的这篇文章,代码的格式什么的都一起过来了,很爽有木有
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...
- iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片
图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...
- iOS 图片大小压缩 图片尺寸处理
图片的压缩其实是俩概念,1.是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降,2.是 “缩” 文件的尺寸变小,也就是像素数减少.长宽尺寸变小,文件体积同样会减小. 这个 UII ...
- 异步上传&预览图片-不压缩图片
本例使用ajaxFileUpload异步上传预览图片 <bean id="multipartResolver" class="org.springframework ...
- JAVA压缩图片 服务器端压缩图片 原创
@RequestMapping(value = "/uploadImage", method = RequestMethod.POST) @ResponseBody public ...
- 2019-3-21-win10-uwp-修改图片质量压缩图片
title author date CreateTime categories win10 uwp 修改图片质量压缩图片 lindexi 2019-03-21 15:29:20 +0800 2019- ...
- ios中摄像头/相册获取图片压缩图片上传服务器方法总结
本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下. 这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...
- ios获取相册图片 压缩图片
从摄像头/相册获取图片 刚刚在上面的知识中提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用.在这里,我们需要过UIImagePickerController类来和用户交互. ...
- [Xcode 实际操作]七、文件与数据-(3)创建文本文件、属性列表文件、图片文件
目录:[Swift]Xcode实际操作 本文将演示如何创建各种类型的文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class V ...
随机推荐
- SecureCRT的帮助文档
[Help]->[Help Topics] Ubuntu:file:///usr/share/doc/scrt/SecureCRTHelp/SecureCRT.htm
- SFTP & FTP Upload
简述 >> FTP: 1. Install FTP service on Linux(Red Hat) as root user [root]# yum install ftp 2. ...
- hadoop datanode节点超时时间设置
datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长. HDFS默认的超时时长为10分 ...
- Cocos2d-x中Vector<T>容器以及实例介绍
Vector<T> 是Cocos2d-x 3.x推出的列表容器,因此它所能容纳的是Ref及子类所创建的对象指针,其中的T是模板,表示能够放入到容器中的类型,在Cocos2d-x 3.x中T ...
- 自己定义字体之BMFont的使用
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 一篇文章说完Java的垃圾回收过程
想要了解java的垃圾回收过程首先要理解java堆的内存模型,简单表示如下: 从上面的图片可以看出,java的堆内存可以简单的分为,新生代和老年代,在新生代中有分为三个区域,1个Eden区和2个S ...
- INSTALL_FAILED_UID_CHANGED解决的方法
近期开发过程中又遇到了这个问题,最终找到了一个比較好的解决的方法.在此记录下. 打开手机或者pad中的设置----->安全----->未知来源(同意安装非安卓市场应用程序). 把这个取消, ...
- 26最小公倍数 lowest common multiple
题目描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数. 输入描述:输入两个正整数A和B. 输出描述:输出A和B的最小公倍数. 输入例子 ...
- Android TelephonyManager类的使用
TelephonyManager类主要提供了一系列获取手机与通讯相关的状态和信息的get方法,包含手机用户的信息.手机SIM的状态.电信网络的状态等. TelephonyManager类的对象的获取: ...
- Windows 10 1703创意者更新官方ISO镜像大全
2017年04月07日 20:00 19867 次阅读 稿源:快科技 12 条评论 Windows 10 Creators Update创意者更新正式版已经发布,目前只能通过易生.MCT工具或者ISO ...