Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.
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);
}
}

?>