You've already forked EasyImages2.0
mirror of
https://github.com/icret/EasyImages2.0.git
synced 2025-12-13 11:43:58 +08:00
changes
This commit is contained in:
123
app/compress/Imagick/class.Imgcompress.php
Normal file
123
app/compress/Imagick/class.Imgcompress.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @param string $src 源图
|
||||
* @param float $percent 压缩比例
|
||||
* 简单图床修改版
|
||||
* 此类压缩单文件
|
||||
* https://www.cnblogs.com/jiji/p/12928028.html
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class Imgcompress
|
||||
{
|
||||
private $src;
|
||||
private $image;
|
||||
private $imageinfo;
|
||||
private $percent = 0.5;
|
||||
|
||||
/**
|
||||
* 图片压缩
|
||||
* @param string $src 源图
|
||||
* @param float $percent 压缩比例
|
||||
*/
|
||||
public function __construct($src, $percent = 1)
|
||||
{
|
||||
$this->src = $src;
|
||||
$this->percent = $percent;
|
||||
}
|
||||
|
||||
/** 高清压缩图片
|
||||
* @param string $saveName 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
|
||||
*/
|
||||
public function compressImg($saveName = '')
|
||||
{
|
||||
$this->_openImage();
|
||||
if (!empty($saveName)) $this->_saveImage($saveName); //保存
|
||||
else $this->_showImage();
|
||||
}
|
||||
|
||||
/**
|
||||
* 内部:打开图片
|
||||
*/
|
||||
private function _openImage()
|
||||
{
|
||||
list($width, $height, $type, $attr) = getimagesize($this->src);
|
||||
$this->imageinfo = array(
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'type' => image_type_to_extension($type, false),
|
||||
'attr' => $attr
|
||||
);
|
||||
$fun = "imagecreatefrom" . $this->imageinfo['type'];
|
||||
$this->image = $fun($this->src);
|
||||
$this->_thumpImage();
|
||||
}
|
||||
|
||||
/**
|
||||
* 内部:操作图片
|
||||
*/
|
||||
private function _thumpImage()
|
||||
{
|
||||
$new_width = $this->imageinfo['width'] * $this->percent;
|
||||
$new_height = $this->imageinfo['height'] * $this->percent;
|
||||
$image_thump = imagecreatetruecolor($new_width, $new_height);
|
||||
/**
|
||||
* 保留图片透明通道
|
||||
* 简单图床 EasyImage 2.0 2021-5-9 21:48:59
|
||||
* 参考: https://www.imooc.com/wenda/detail/581249
|
||||
*/
|
||||
imagealphablending($image_thump, false);
|
||||
imagesavealpha($image_thump, true);
|
||||
|
||||
//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
|
||||
imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
|
||||
|
||||
imagedestroy($this->image);
|
||||
$this->image = $image_thump;
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出图片:保存图片则用saveImage()
|
||||
*/
|
||||
private function _showImage()
|
||||
{
|
||||
header('Content-Type: image/' . $this->imageinfo['type']);
|
||||
$funcs = "image" . $this->imageinfo['type'];
|
||||
$funcs($this->image);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存图片到硬盘:
|
||||
* @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
|
||||
*/
|
||||
private function _saveImage($dstImgName)
|
||||
{
|
||||
if (empty($dstImgName)) return false;
|
||||
$allowImgs = array('.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.gif','.webp'); // 如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
|
||||
$dstExt = strrchr($dstImgName, ".");
|
||||
$sourseExt = strrchr($this->src, ".");
|
||||
if (!empty($dstExt)) $dstExt = strtolower($dstExt);
|
||||
if (!empty($sourseExt)) $sourseExt = strtolower($sourseExt);
|
||||
|
||||
//有指定目标名扩展名
|
||||
if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {
|
||||
$dstName = $dstImgName;
|
||||
} elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
|
||||
$dstName = $dstImgName . $sourseExt;
|
||||
} else {
|
||||
$dstName = $dstImgName . $this->imageinfo['type'];
|
||||
}
|
||||
$funcs = "image" . $this->imageinfo['type'];
|
||||
$funcs($this->image, $dstName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁图片
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
imagedestroy($this->image);
|
||||
}
|
||||
}
|
||||
76
app/compress/TinyImg/TinyImg.php
Normal file
76
app/compress/TinyImg/TinyImg.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Zhang He
|
||||
* Date: 2015/6/8
|
||||
* Time: 10:14
|
||||
* https://www.cnblogs.com/CheeseZH/p/4566068.html
|
||||
*/
|
||||
|
||||
class TinyImg
|
||||
{
|
||||
/*Compress all images in folder $inputFolder and save final images in folder $outputFolder*/
|
||||
public function compressImgsFolder($key, $inputFolder, $outputFolder)
|
||||
{
|
||||
$images = $this->getFiles($inputFolder);
|
||||
if (empty($images)) {
|
||||
return false;
|
||||
}
|
||||
foreach ($images as $image) {
|
||||
$input = $inputFolder . $image;
|
||||
$output = $outputFolder . $image;
|
||||
print($input . " => 源文件<br>");
|
||||
print($output . " => 成功文件<br>");
|
||||
$this->compressImg($key, $input, $output);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/*Compress one image $input and save as $output*/
|
||||
public function compressImg($key, $input, $output)
|
||||
{
|
||||
$url = "https://api.tinify.com/shrink";
|
||||
$options = array(
|
||||
"http" => array(
|
||||
"method" => "POST",
|
||||
"header" => array(
|
||||
"Content-type: image/png",
|
||||
"Authorization: Basic " . base64_encode("api:$key")
|
||||
),
|
||||
"content" => file_get_contents($input)
|
||||
),
|
||||
"ssl" => array(
|
||||
/* Uncomment below if you have trouble validating our SSL certificate.
|
||||
Download cacert.pem from: http://curl.haxx.se/ca/cacert.pem */
|
||||
"cafile" => __DIR__ . "/cacert.pem",
|
||||
"verify_peer" => true
|
||||
)
|
||||
);
|
||||
|
||||
$result = fopen($url, "r", false, stream_context_create($options));
|
||||
if ($result) {
|
||||
/* Compression was successful, retrieve output from Location header. */
|
||||
foreach ($http_response_header as $header) {
|
||||
if (strtolower(substr($header, 0, 10)) === "location: ") {
|
||||
file_put_contents($output, fopen(substr($header, 10), "rb", false));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Something went wrong! */
|
||||
print("Compression failed<br>");
|
||||
}
|
||||
}
|
||||
//get all files' fullname in $filedir
|
||||
public function getFiles($filedir)
|
||||
{
|
||||
$files = [];
|
||||
$dir = @dir($filedir);
|
||||
while (($file = $dir->read()) != false) {
|
||||
if ($file != "." and $file != "..") {
|
||||
$files[] = $file;
|
||||
}
|
||||
}
|
||||
$dir->close();
|
||||
return $files;
|
||||
}
|
||||
}
|
||||
3174
app/compress/TinyImg/cacert.pem
Normal file
3174
app/compress/TinyImg/cacert.pem
Normal file
File diff suppressed because it is too large
Load Diff
54
app/compress/function.compress.php
Normal file
54
app/compress/function.compress.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 压缩文件函数调用位置
|
||||
*/
|
||||
require_once __DIR__ . '/../function.php';
|
||||
require_once APP_ROOT . '/app/compress/Imagick/class.Imgcompress.php';
|
||||
require_once APP_ROOT . '/app/compress/TinyImg/TinyImg.php';
|
||||
require_once APP_ROOT . '/config/api_key.php';
|
||||
|
||||
/**
|
||||
* @param string $floder 文件夹
|
||||
* @param string 压缩方式Imgcompress / TinyPng
|
||||
*/
|
||||
function compress($floder, $type = 'Imgcompress', $source = '')
|
||||
{
|
||||
global $config;
|
||||
ini_set('max_execution_time', '0'); // 脚本运行的时间(以秒为单位)0不限制
|
||||
|
||||
if ($type == 'Imgcompress') {
|
||||
|
||||
$pic = getFile($floder); // 文件夹路径
|
||||
$percent = $config['compress_ratio'] / 100; // 压缩率
|
||||
foreach ($pic as $value) {
|
||||
$boxImg = $floder . $value;
|
||||
// 跳过动态图片
|
||||
if (!isGifAnimated($boxImg)) {
|
||||
$img = new Imgcompress($boxImg, $percent);
|
||||
$img->compressImg($boxImg);
|
||||
echo '<pre>' . $boxImg . '</pre><br />';
|
||||
// 释放
|
||||
ob_flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($type == 'TinyPng') {
|
||||
if (empty($config['TinyPng_key'])) {
|
||||
exit('请先申请TinyPng key并保存再试!');
|
||||
}
|
||||
$folder = '..' . $config['path'] . $source;
|
||||
$tinyImg = new TinyImg();
|
||||
$key = $config['TinyPng_key'];
|
||||
$input = $folder; //这个文件夹下的文件会被压缩
|
||||
$output = $folder; //压缩的结果会被保存到这个文件夹中
|
||||
$tinyImg->compressImgsFolder($key, $input, $output);
|
||||
}
|
||||
}
|
||||
|
||||
/* Test
|
||||
$floder = 'D:/phpStudy/WWW/i/2021/05/09/';
|
||||
compress($floder, 'TinyImg');
|
||||
echo 666;
|
||||
*/
|
||||
Reference in New Issue
Block a user