PHP实现图片文件伪加密打乱简单思路
在PHP开发中偶尔有些特殊情况不希望直接暴露某些图片的真实地址,除了可以给图片存入数据库、图片写入其他格式的文件再读取显示之外,这里写了个简单的将图片字节前后颠倒打乱的方法,
class SevStudioImg{ function pr($length,$length0,$length1){ echo <<<SS length:{$length}<br/>length0:{$length0}<br/>length1:{$length1}<br/> SS; exit; } //图片打乱 function fix($path){ $hd = fopen($path,'r'); if($hd === False){ return null; } $length = filesize($path); $step = $length % 2 == 0 ? $length / 2 : (($length + 1) / 2); $data[] = fread($hd,$step); $data[] = fread($hd,$length - $step); fclose($hd); return $data[1].$data[0]; } //图片复原 function read($path){ $hd = fopen($path,'r'); if($hd === False){ return null; } $length = filesize($path); $step = $length % 2 == 0 ? $length / 2 : (($length - 1) / 2); $data[] = fread($hd,$step); $data[] = fread($hd,$length - $step); fclose($hd); return $data[1].$data[0]; } //将图片数据保存为图片 function save($data,$path){ $writer = fopen($path,'w'); fwrite($writer,$data); fclose($writer); } //将图片数据输出到浏览器,显示图片 function show($data){ header('Content-Type:image/jpeg'); echo $data; } }
用的时候先做类的实例化
$hp = new SevStudioImg();
打乱图片
$data = $hp->fix('原图路径'); $hp->save($data,'新图保存路径');
显示方法
$data = $hp->read('打乱后图片的路径'); $hp->show($data);//直接输出图片到浏览器 $hp->save($data,'还原后图片保存路径');