Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重用图片压缩的代码 #38

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 2 additions & 54 deletions application/controllers/Compress.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public function img($id){
if($img->compression == 0){
//获取图片完整路径
$fullpath = FCPATH.$img->path;
$this->tinypng($fullpath);
$this->load->library('image');
$this->image->compress($fullpath);
//更新数据库
$this->load->model('update','',TRUE);
$this->update->compress($id);
Expand All @@ -49,59 +50,6 @@ public function img($id){
$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 changes: 4 additions & 42 deletions application/controllers/Deal.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,51 +48,13 @@ public function compress($id){
$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)){
Expand Down
71 changes: 70 additions & 1 deletion application/libraries/Image.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,78 @@ public function thumbnail($source,$width,$height){
$image->clear();
}
//压缩图片
public function compress($source){
public function compress($source, $output='', $channel='tinypng') {
if (empty($output)) {
$output = $source;
}
switch ($channel) {
case 'tinypng':
$key = "F8rNr5lh25WYcOECQvAqvcilBMAkhtIM";
return $this->tinypng($source,$output, $key);
default :
return $source;
}

}

//请求tinypng压缩接口,传入图片完整路径
protected function tinypng($path, $outputPath='', $key=''){
if (empty($outputPath)) {
$outputPath = $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";
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}:{$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);
//打印获得的数据
$data = json_decode($output);
//获取图片压缩后的URL
$url = $data->output->url;
//先判断是否是正常的URL,万一请求接口失败了呢
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
//保存图片
return $this->download($url, $outputPath);
}

//传递图片URL,并保存文件
protected function download($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);

//将图片数据覆盖源文件
return file_put_contents($path,$filedata);
}
}

?>