依然是关于“PHP图片压缩的返回地址”问题

疯狂的流浪 发布于 2014/02/04 00:46
阅读 979
收藏 0
PHP

首先我也是因为一些需求看到了这个“PHP图片无损压缩”的帖子:http://www.oschina.net/question/814955_115750

感谢@MeiKai @洒洒 @宝仔love 但是我这里依然有一个问题,实际上我的需求就是要将原来系统中上传的图片(可能比较大)在上传到服务器后,然后再去重新压缩图片,然后再将图片地址返回给程序(原来的程序流程就是上传到服务器,然后返回图片地址)。

现在我按照你们上面的讨论,有了个大概的思路:

1.上传图片到服务器(这个是原来程序的流程,不动代码)

2.上传完毕后,得到图片地址,然后利用你们的方法,压缩,然后删除原来大的图片,留下小的图片,当然名字是一样的

3.返回图片在服务器的保留的地址给程序进行接下来的其他处理(这个是原来程序的流程,不动代码

我的关于压缩的实现代码如下:


/*处理上传图片太大的问题*/
function pictumb($srcFile,$percent,$quality){
	$dstFile = $srcFile;//保留名字
	header('Content-Type: image/jpeg');

	// 获取新的尺寸
	list($width, $height) = getimagesize($srcFile);
	$new_width = $width * $percent;
	$new_height = $height * $percent;

	// 重新取样
	$image_p = imagecreatetruecolor($new_width, $new_height);
	$image = imagecreatefromjpeg($srcFile);
	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	
	chmod($srcFile,0777);//unlink函数要求对删除的图片有777的权限
	unlink($srcFile);//先删除图片,在进行保存
	// 输出
	imagejpeg($image_p, $dstFile, 75);//改变这个null的值即可
}



调用的代码如下:



/**
*上传文件
**/
function upfile($upfile,$array){
	......
$tempname="{$lfjuid}_".date("YmdHms_").rands(5).$filetype;
	
	$newfile="$path/$tempname";

	if(@move_uploaded_file($upfile,$newfile))
	{
		@chmod($newfile, 0777);
		$ck=2;
	}  
if($ck)
	{
		if(eregi("(.jpg|.png|.gif|.bmp)$",$filetype)){
			pictumb($newfile,1,75);
	    }
		return $tempname;
	}
}

大致的一个程序操作过程是这样:

正常的话应该点 “上传文件”后(上面的窗口就关闭了)在下面4那个图片地址一栏里就会有图片的最新的地址,但是当我加了这个函数的处理后,点上传文件了 在“2”这个数字的地方出现红叉(如果注释掉

header('Content-Type: image/jpeg');
的话数字"2"这个地方就是空白)

总体的问题感觉就是图片压缩这段处理的函数好像是返回了图片(输出的是二进制的图片)而不是地址,请问上面三位大神有没有解决的办法?感激不尽,也祝大家新年快乐。


加载中
0
Tuesday
Tuesday

 pictumb($newfile,1,75);

好像没有中断. 加个exit()试试.

从代码层来看, 属于标准的码农.

0
疯狂的流浪
疯狂的流浪
急求三位大神 @MeiKai   @洒洒   @宝仔love  指点了
0
MeiKai
MeiKai
在函数 pictumb()中就不需要加header()了,在你的调用代码加header,因为puctumb实现了把图片保存到文件中,就没必要header了,你的需求是输出图片地址,因此也没有必要加header,之所以空白,应该是你的正则表达式有问题,eregi官方不推荐使用,用preg_match
疯狂的流浪
疯狂的流浪
问题找到了,呵呵,不是正则的问题,是最后没有imagedestroy,不过你提到的这个正则的问题我以后也会注意的,感谢了,祝新年快乐
疯狂的流浪
疯狂的流浪
我在函数中注释了header后,就不是红叉而是提交后一片空白
0
疯狂的流浪
疯狂的流浪

不好意思了,昨天出去了,我试了下你说的,我在pictumb函数中加了exit(),但是当我上传图片后,点“上传提交”的时候出现了这个红叉,难道是我加的地方不对?

还请大神@Tuesday指点一二,感谢!!

0
疯狂的流浪
疯狂的流浪

不好意思了,@MeiKai昨天出去了,你说的正则问题我也试了一下,还是不行,代码如下:


....
		if(preg_match("/jpg|png|gif|bmp/i",$filetype)){
			pictumb($newfile,1,75);
	    }
		
		return $tempname;
......



和楼上的问题一样,还是点“上传文件”时出现红叉的图片,上传的窗口不关闭,


求解惑了,感谢大神们了@MeiKai

0
疯狂的流浪
疯狂的流浪
@MeiKai  @Tuesday 两位大神,感觉地址不返回好像和你们说的这两个关系貌似不是很大额,还有@洒洒   @宝仔love  再麻烦帮忙支招下,感谢
0
mark35
mark35
用firebug看看上传结束后返回了啥东东吧
0
疯狂的流浪
疯狂的流浪

用FIREFOX上传显示乱码

@mark35 感谢

0
mark35
mark35

引用来自“疯狂的流浪”的答案

用FIREFOX上传显示乱码

@mark35 感谢

你这个返回的是图片内容吧。firebug看看返回的header是啥类型
疯狂的流浪
疯狂的流浪
回复 @mark35 : 谢谢了
mark35
mark35
回复 @疯狂的流浪 : 网络-XHR
疯狂的流浪
疯狂的流浪
貌似我没有加那个header 这个header怎么看额?
疯狂的流浪
疯狂的流浪
jpeg
0
Tuesday
Tuesday

我觉得就是没中断, 后面或者前面有输出...


疯狂的流浪
疯狂的流浪
确实,就是这个问题,我最后没有imagedestroy,所以就出问题了,感谢。
疯狂的流浪
疯狂的流浪
恩,这个我再去看看,感谢了
返回顶部
顶部