initial commit
This commit is contained in:
98
api.php
Normal file
98
api.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
$type = $_GET['type'];
|
||||
$timeout = $_GET['timeout'];
|
||||
$viewport = $_GET['viewport'];
|
||||
$js = $_GET['js'];
|
||||
$resizewidth = $_GET['width'];
|
||||
$cache = preg_replace("/[^A-Za-z0-9 ]/", '', $_GET['cache']);
|
||||
$onfail = rawurldecode($_GET['onfail']);
|
||||
if(!$onfail)
|
||||
$onfail = 'https://http2pic.haschek.at/img/failed.jpg';
|
||||
$url = rawurldecode($_GET['url']);
|
||||
if(isBase64($url))
|
||||
$url = base64_decode($url);
|
||||
|
||||
if(!$timeout)
|
||||
$timeout = 10;
|
||||
|
||||
if($viewport)
|
||||
{
|
||||
$a=explode('x', $viewport);
|
||||
$w = $a[0];
|
||||
$h = $a[1];
|
||||
if($w)
|
||||
$vp = "--width $w ";
|
||||
if($h)
|
||||
$vp.= "--height $h ";
|
||||
|
||||
}
|
||||
|
||||
if($js=='no')
|
||||
$jsp = '-n ';
|
||||
|
||||
switch ($type) {
|
||||
case 'png':
|
||||
$ft = $type;
|
||||
header('Content-Type: image/png');
|
||||
break;
|
||||
|
||||
case 'jpg':
|
||||
case 'jpeg':
|
||||
default:
|
||||
$ft = 'jpg';
|
||||
header('Content-Type: image/jpeg');
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(!$cache)
|
||||
$cache = md5(time().rand(1,2000));
|
||||
$hash = $cache.'-'.preg_replace("/[^A-Za-z0-9 ]/", '', $url).'.'.$ft;
|
||||
|
||||
|
||||
$file = __DIR__.'/cache/'.$hash;
|
||||
if(!file_exists($file))
|
||||
shell_exec('timeout '.$timeout.' /usr/sbin/wkhtmltoimage '.$vp.$jsp.'-f '.$ft.' '.$url.' '.$file);
|
||||
|
||||
if(filesize($file)==0 && $onfail)
|
||||
@file_put_contents($file, file_get_contents($onfail));
|
||||
|
||||
if($resizewidth)
|
||||
{
|
||||
list($width_orig, $height_orig) = getimagesize($file);
|
||||
if($width_orig!=$resizewidth)
|
||||
{
|
||||
$ratio_orig = $width_orig/$height_orig;
|
||||
$height = $resizewidth/$ratio_orig;
|
||||
|
||||
// resample
|
||||
$image_p = imagecreatetruecolor($resizewidth, $height);
|
||||
$image = imagecreatefromjpeg($file);
|
||||
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $resizewidth, $height, $width_orig, $height_orig);
|
||||
imagejpeg($image_p, $file, 100);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($ft=='jpg')
|
||||
{
|
||||
$res = imagecreatefromjpeg($file);
|
||||
imagejpeg($res,NULL,100);
|
||||
}
|
||||
else if($ft=='png')
|
||||
{
|
||||
$res = imagecreatefrompng($file);
|
||||
imagepng($res,NULL,9);
|
||||
}
|
||||
|
||||
|
||||
imagedestroy($res);
|
||||
|
||||
function isBase64($data)
|
||||
{
|
||||
if ( base64_encode(base64_decode($data, true)) === $data){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user