forked from Korbs/4get
131 lines
2.6 KiB
PHP
131 lines
2.6 KiB
PHP
|
<?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
|
||
|
if(
|
||
|
preg_match(
|
||
|
'/bing.net$/',
|
||
|
parse_url($_GET["i"], PHP_URL_HOST)
|
||
|
)
|
||
|
){
|
||
|
|
||
|
switch($_GET["s"]){
|
||
|
|
||
|
case "portrait": $req = "&w=50&h=90&p=0&qlt=99"; break;
|
||
|
case "landscape": $req = "&w=160&h=90&p=0&qlt=99"; break;
|
||
|
case "square": $req = "&w=90&h=90&p=0&qlt=99"; break;
|
||
|
case "thumb": $req = "&w=236&h=180&p=0&qlt=99"; break;
|
||
|
case "cover": $req = "&w=207&h=270&p=0&qlt=99"; break;
|
||
|
}
|
||
|
|
||
|
$proxy->stream_linear_image($_GET["i"] . $req, "https://bing.net");
|
||
|
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(new ImagickPixel("#504945"));
|
||
|
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
|
||
|
|
||
|
$image->resizeImage($image_width, $image_height, Imagick::FILTER_LANCZOS, 1);
|
||
|
|
||
|
$image->stripImage();
|
||
|
$image->setFormat("jpeg");
|
||
|
$image->setImageCompression(Imagick::COMPRESSION_JPEG2000);
|
||
|
|
||
|
$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();
|
||
|
}
|