Browse Source

图片压缩的代码重用

pull/38/head
banditsmile 5 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 @@ @@ -50,59 +50,6 @@
$info = json_encode($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 @@ @@ -48,51 +48,13 @@
$kyes = json_decode($kyes);
$i = 'api'.rand(1,2);
$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,万一请求接口失败了呢
if(!filter_var($outurl, FILTER_VALIDATE_URL)){
//糟糕,没有验证通过,那就结束了
$this->err_msg('请求接口失败!');
$this->load->library('image');
$ret = $this->image->compress($path);
if(empty($ret)) {
$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";
if($this->db->query($sql)){

10
application/libraries/Image.php

@ -38,14 +38,14 @@ @@ -38,14 +38,14 @@
$image->clear();
}
//压缩图片
public function compress($source,$output='',$channel='tinypng'){
public function compress($source, $output='', $channel='tinypng') {
if (empty($output)) {
$output = $source;
}
switch ($channel) {
case 'tinypng':
$key = "F8rNr5lh25WYcOECQvAqvcilBMAkhtIM";
$this->tinypng($source,$output, $key);
return $this->tinypng($source,$output, $key);
default :
return $source;
}
@ -82,8 +82,12 @@ @@ -82,8 +82,12 @@
$data = json_decode($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,并保存文件

Loading…
Cancel
Save