imgurl/application/controllers/Compress.php

107 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/*
name图片压缩类
anthorxiaoz.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" => 'errorThe 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);
}
}
?>