Browse Source

图片压缩的代码重用

pull/38/head
banditsmile 6 years ago
parent
commit
2ee54df166
  1. 53
      application/controllers/Compress.php
  2. 46
      application/controllers/Deal.php
  3. 10
      application/libraries/Image.php

53
application/controllers/Compress.php

@ -50,59 +50,6 @@
$info = json_encode($info); $info = json_encode($info);
echo $info; echo $info;
} }
}
//请求tinypng压缩接口,传入图片完整路径
protected function tinypng($path){
//tinypng API地址
$api_url = "https://api.tinify.com/shrink";
$data = file_get_contents($path);
//$post_data = array ("username" => "bob","key" => "12345");
//$ch = curl_init();
$ch = curl_init();
$user = "api";
$pass = "F8rNr5lh25WYcOECQvAqvcilBMAkhtIM";
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$pass}");
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
curl_close($ch);
//打印获得的数据
$data = json_decode($output);
//获取图片压缩后的URL
$url = $data->output->url;
//保存图片
$this->save($url,$path);
}
//传递图片URL,并保存文件
protected function save($url,$path){
//获取图片数据并保存
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36");
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
#设置超时时间,最小为1s(可选)
#curl_setopt($curl , CURLOPT_TIMEOUT, 1);
$filedata = curl_exec($curl);
curl_close($curl);
//将图片数据覆盖源文件
file_put_contents($path,$filedata);
} }
} }
?> ?>

46
application/controllers/Deal.php

@ -48,51 +48,13 @@
$kyes = json_decode($kyes); $kyes = json_decode($kyes);
$i = 'api'.rand(1,2); $i = 'api'.rand(1,2);
$key = $kyes->$i; $key = $kyes->$i;
$url = "https://api.tinify.com/shrink";
$data = file_get_contents($path);
$ch = curl_init();
$user = "api";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$key}");
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output);
//获取压缩后的图片链接
$outurl = $output->output->url;
//先判断是否是正常的URL,万一请求接口失败了呢 $this->load->library('image');
if(!filter_var($outurl, FILTER_VALIDATE_URL)){ $ret = $this->image->compress($path);
//糟糕,没有验证通过,那就结束了 if(empty($ret)) {
$this->err_msg('请求接口失败!'); $this->err_msg('压缩失败,请稍后重试!');
} }
//下载图片并保存覆盖
$curl = curl_init($outurl);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
#设置超时时间,最小为1s(可选)
$data = curl_exec($curl);
curl_close($curl);
//重新保存图片
file_put_contents($path,$data);
//最后别忘了更新数据库呀 //最后别忘了更新数据库呀
$sql = "UPDATE img_images SET compression = 1 WHERE `id` = $id"; $sql = "UPDATE img_images SET compression = 1 WHERE `id` = $id";
if($this->db->query($sql)){ if($this->db->query($sql)){

10
application/libraries/Image.php

@ -38,14 +38,14 @@
$image->clear(); $image->clear();
} }
//压缩图片 //压缩图片
public function compress($source,$output='',$channel='tinypng'){ public function compress($source, $output='', $channel='tinypng') {
if (empty($output)) { if (empty($output)) {
$output = $source; $output = $source;
} }
switch ($channel) { switch ($channel) {
case 'tinypng': case 'tinypng':
$key = "F8rNr5lh25WYcOECQvAqvcilBMAkhtIM"; $key = "F8rNr5lh25WYcOECQvAqvcilBMAkhtIM";
$this->tinypng($source,$output, $key); return $this->tinypng($source,$output, $key);
default : default :
return $source; return $source;
} }
@ -82,8 +82,12 @@
$data = json_decode($output); $data = json_decode($output);
//获取图片压缩后的URL //获取图片压缩后的URL
$url = $data->output->url; $url = $data->output->url;
//先判断是否是正常的URL,万一请求接口失败了呢
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
//保存图片 //保存图片
$this->download($url, $outputPath); return $this->download($url, $outputPath);
} }
//传递图片URL,并保存文件 //传递图片URL,并保存文件

Loading…
Cancel
Save