77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?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;
 | 
						|
    }
 | 
						|
}
 |