您的位置:首页 > 编程语言 > PHP开发

phpPHP创建创建jpg格式图片以及压缩图片(转)

2015-06-13 10:43 519 查看

其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上找到了:

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)。

程序示例

1
<?
2
Header(
"Content-type: image/jpeg"
);
3
$im
=imagecreatefromjpeg(
"./test.jpg"
);
4
Imagejpeg(
$im
,
''
,20);
5
ImageDestroy(
$im
);
6
?>
假如有如下需求,用户上传的图片,我需要将它的图片质量降低到70%左右,可以缺省 filename 参数,然后指定原始图片与quality的值即可。当然你可以指定第二个参数作为新生成图片的文件名。

01
<?php
02
//图片的质量参数
03
$quality
=70;
04
05
if
(isset(
$_FILES
[
'watermarkee'
]) &&
$_FILES
[
'watermarkee'
][
'error'
]==0)\
06
{
07
$original
=
$_FILES
[
'watermarkee'
][
'tmp_name'
];
08
//创建原始图片
09
$resultImage
=imagecreatefromjpeg(
$original
);
10
11
//定义生成的图片的名字
12
$target_name
=
date
(
'YmdHis'
).
'_'
.preg_replace(
'`[^a-z0-9-_.]`i'
,
''
,
$_FILES
[
'watermarkee'
][
'name'
]);
13
$target
=dirname(
__FILE__
).
'/results/'
.
$target_name
;
14
15
//生成新图片
16
imagejpeg(
$resultImage
,
$target
,
$quality
);
17
}
18
?>
这里谈一下 imagecreatefromjpeg() 函数。

表单上传至服务器后,会产生$_FILES数组。如果数据有效。

01
$_FILES
[
'userfile'
][
'name'
]
02
//客户端机器文件的原名称
03
04
$_FILES
[
'userfile'
][
'type'
]
05
//文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值
06
07
$_FILES
[
'userfile'
][
'size'
]
08
//已上传文件的大小,单位为字节
09
10
$_FILES
[
'userfile'
][
'tmp_name'
]
11
//文件被上传后在服务端储存的临时文件名
12
13
$_FILES
[
'userfile'
][
'error'
]
14
15
$_FILES
[
'userfile'
][
'tmp_name'
]
16
//临时文件已经可以作为有效的jpeg文件进行处理了。但最终通过image一系列函数处理的图像,最终的存储是要移动至目标目录的
17
18
imagecreatefromjpeg(
$_FILES
[
'userfile'
][
'tmp_name'
])
//即可生成有效的image资源
一段上传jpg图片,服务器端保存原图片和缩略图,并显示缩略图的方法。

view source

print?

01
<?php
02
//保存文件缩略图
03
function
thumbnail(
$filename
,
$newWidth
,
$imgName
)
04
{
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
);
10
 
11
//输出jpeg图像
12
header (
'Content-type: image/jpeg'
);
13
imagejpeg (
$newImage
,
$imgName
,99 );
14
//imagedestroy ($filename );  //若不用于显示则不用该方法。
15
}
16
 
17
//jpg文件上传并显示缩略图
18
function
uploadImageFiles()
19
{
20
$uploaddir
=
getcwd
() .
"/uploads/"
;
21
$uploadfile
=
$uploaddir
.
$_FILES
[
"upfile"
] [
"name"
];
22
//global $uploadfile;
23
if
(
$_FILES
[
"upfile"
] [
"size"
] > 5000000)
24
{
25
echo
"<script language='javascript'>alert('上传文件不得大于5M!');history.go(-1)</script>"
;
26
}
27
else
28
{
29
if
(
$_FILES
[
"upfile"
] [
"type"
] !=
"image/gif"
and
$_FILES
[
"upfile"
] [
"type"
] !=
"image/pjpeg"
)
30
{
31
echo
"<script language='javascript'>alert('上传文件类型必须是gif/jpeg/jpg格式!');history.go(-1)</script>"
;
32
}
33
else
34
{
35
$this
->thumbnail (
$_FILES
[
"upfile"
][
"tmp_name"
],100,
$uploaddir
.
"miniImg/"
.
$_FILES
[
"upfile"
][
"name"
] );
36
if
(move_uploaded_file (
$_FILES
[
"upfile"
] [
"tmp_name"
],
$uploadfile
))
37
{
38
echo
"文件上传成功。"
;
39
echo
"<img src=\"uploads/miniImg/"
.
$_FILES
[
"upfile"
] [
"name"
] .
"\"/>"
;
40
}
41
}
42
}
43
}
44
?>
其实经过以上的学习后,我单独做了一个图片压缩的没什么问题,但是整合到我用的系统中时始终不行,为此还特地在OSC上发了帖子(依然是关于“PHP图片压缩的返回地址”问题):

http://www.oschina.net/question/59519_142458

最后也解决了,实际上很简单,还是没有好好读PHP的关于这个图片处理的手册,最后掉了一个imagedestory函数。

p.s.csdn这个功能不错,我直接覆盖上面的这篇文章,代码的格式什么的都一起过来了,很爽有木有
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: