123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- include "data/config.php";
- include "lib/curlproxy.php";
- $proxy = new proxy();
- if(!isset($_GET["i"])){
-
- header("X-Error: No URL(i) provided!");
- $proxy->do404();
- die();
- }
- try{
-
- // original size request, stream file to browser
- if(
- !isset($_GET["s"]) ||
- $_GET["s"] == "original"
- ){
-
- $proxy->stream_linear_image($_GET["i"]);
- die();
- }
-
- // bing request, ask bing to resize and stream to browser
- $image = parse_url($_GET["i"]);
-
- if(
- isset($image["host"]) &&
- preg_match(
- '/^[A-z0-9.]*bing\.(net|com)$/i',
- $image["host"]
- )
- ){
-
- if(
- !isset($image["query"]) ||
- !isset($image["path"]) ||
- $image["path"] != "/th"
- ){
-
- header("X-Error: Invalid bing image path");
- $proxy->do404();
- die();
- }
-
- parse_str($image["query"], $str);
-
- if(!isset($str["id"])){
-
- header("X-Error: Missing bing ID");
- $proxy->do404();
- die();
- }
-
- switch($_GET["s"]){
-
- case "portrait": $req = "&w=50&h=90&p=0&qlt=90"; break;
- case "landscape": $req = "&w=160&h=90&p=0&qlt=90"; break;
- case "square": $req = "&w=90&h=90&p=0&qlt=90"; break;
- case "thumb": $req = "&w=236&h=180&p=0&qlt=90"; break;
- case "cover": $req = "&w=207&h=270&p=0&qlt=90"; break;
- }
-
- $proxy->stream_linear_image("https://" . $image["host"] . "/th?id=" . urlencode($str["id"]) . $req, "https://www.bing.com");
- die();
- }
-
- // resize image ourselves
- $payload = $proxy->get($_GET["i"], $proxy::req_image, true);
-
- // get image format & set imagick
- $image = null;
- $format = $proxy->getimageformat($payload, $image);
-
- try{
-
- if($format !== false){
- $image->setFormat($format);
- }
-
- $image->readImageBlob($payload["body"]);
-
- $image_width = $image->getImageWidth();
- $image_height = $image->getImageHeight();
-
- switch($_GET["s"]){
-
- case "portrait":
- $width = 50;
- $height = 90;
- break;
-
- case "landscape":
- $width = 160;
- $height = 90;
- break;
-
- case "square":
- $width = 90;
- $height = 90;
- break;
-
- case "thumb":
- $width = 236;
- $height = 180;
- break;
-
- case "cover":
- $width = 207;
- $height = 270;
- break;
- }
-
- $ratio = $image_width / $image_height;
-
- if($image_width > $width){
-
- $image_width = $width;
- $image_height = round($image_width / $ratio);
- }
- if($image_height > $height){
-
- $ratio = $image_width / $image_height;
- $image_height = $height;
- $image_width = $image_height * $ratio;
- }
-
- $image->setImageBackgroundColor("#504945");
- $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
-
- $image->stripImage();
- $image->setFormat("jpeg");
- $image->setImageCompressionQuality(90);
- $image->setImageCompression(Imagick::COMPRESSION_JPEG2000);
-
- $image->resizeImage($image_width, $image_height, Imagick::FILTER_LANCZOS, 1);
-
- $proxy->getfilenameheader($payload["headers"], $_GET["i"]);
-
- header("Content-Type: image/jpeg");
- echo $image->getImageBlob();
-
- }catch(ImagickException $error){
-
- header("X-Error: Could not convert the image: (" . $error->getMessage() . ")");
- $proxy->do404();
- }
-
- }catch(Exception $error){
-
- header("X-Error: " . $error->getMessage());
- $proxy->do404();
- die();
- }
|