为了节省带宽,我在下载到用户之前缩放图像(我会自己缩放它们,但其他人正在上传它们):
function scaleIm($I){
$file="{$I['dir']}/{$I['name']}.{$I['ext']}";
$img=imagecreatefromjpeg($file);
$i_x=imagesx($img);
$i_y=imagesy($img);
$di_x=155;
$di_y=155;
$d_i=imagecreatetruecolor($di_x, $di_y);
imagecopyresampled($d_i,$img,0,0,0,0,$di_x,$di_y,$i_x,$i_y);
ob_start();
header("Content-type: image/jpeg");
imagejpeg($d_i,NULL,100);
imagedestroy($d_i);
$i=ob_get_clean();
return 'background-image:url(data:image/jpeg;base64,'.base64_encode($i).');';
}
由于我在一个响应中将所有图像打包在一起,因此所有图像都必须成功才能显示任何图像。当我的同事在一个不稳定的连接上上传一个特别大的图像时,我们冒着图像变成一半的风险。此时,整个页面都失败了。
我需要为损坏的图像写一个例外。我尝试过的退货条件:
if(!filesize($file)) //Doesn't work because a half-loaded file still has size
if(!file_exists($file)) //See above
if(!$img)
最后一个看起来很有希望,但我认为失败点在$img=imagecreatefrom($jpeg)
。