mirror of https://github.com/helloxz/imgurl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.9 KiB
107 lines
3.9 KiB
6 years ago
|
<?php
|
||
|
/*
|
||
|
name:图片压缩类
|
||
|
anthor:xiaoz.me
|
||
|
QQ:337003006
|
||
|
*/
|
||
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
||
|
|
||
|
class Compress extends CI_Controller{
|
||
|
//构造函数
|
||
|
public function __construct(){
|
||
|
parent::__construct();
|
||
|
//设置超时时间
|
||
|
ini_set('max_execution_time','0');
|
||
|
}
|
||
|
//压缩单张图片,需要传入图片ID
|
||
|
public function img($id){
|
||
|
$t1 = microtime(true);
|
||
|
|
||
|
//通过图片ID查询出图片基本信息
|
||
|
$this->load->model('query','',TRUE);
|
||
|
$img = $this->query->img($id);
|
||
|
|
||
|
//如果图片没有压缩过,则调用压缩接口
|
||
|
if($img->compression == 0){
|
||
|
//获取图片完整路径
|
||
|
$fullpath = FCPATH.$img->path;
|
||
|
$this->tinypng($fullpath);
|
||
|
//更新数据库
|
||
|
$this->load->model('update','',TRUE);
|
||
|
$this->update->compress($id);
|
||
|
$t2 = microtime(true);
|
||
|
//计算执行时间
|
||
|
$used_time = round($t2 - $t1).'s';
|
||
|
$info = array(
|
||
|
"code" => 200,
|
||
|
"used_time" => $used_time,
|
||
|
"msg" => 'compressing.'
|
||
|
);
|
||
|
$info = json_encode($info);
|
||
|
echo $info;
|
||
|
}
|
||
|
//图片已经压缩过情况
|
||
|
else{
|
||
|
$info = array(
|
||
|
"code" => 0,
|
||
|
"msg" => 'error:The image has been compressed!'
|
||
|
);
|
||
|
$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);
|
||
|
}
|
||
|
}
|
||
|
?>
|