( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ HEX
HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux mail.thebrand.ai 6.8.0-107-generic #107-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 13 19:51:50 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/test5.php
<?php // Get the image URL



define('MEMORY_TO_ALLOCATE',	'100M');
define('DEFAULT_QUALITY',		100);
define('CURRENT_DIR',			dirname(__FILE__));
define('CACHE_DIR_NAME',		'/imagecache/');
define('CACHE_DIR',				CURRENT_DIR . CACHE_DIR_NAME);
define('DOCUMENT_ROOT',			"");

$image = 'https://images.unsplash.com/photo-1614928228253-dc09cbc3b11c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTY5OTZ8MHwxfHNlYXJjaHwxMTV8fHdvcmtvdXR8ZW58MHx8fHwxNjM2NDYxNjA5&ixlib=rb-1.2.1&q=80&w=1080';


// Get the image size
$size = getimagesize($image);

$width			= $size[0];
$height			= $size[1];


$maxWidth		= (isset($_GET['width'])) ? (int) $_GET['width'] : 0;
$maxHeight		= (isset($_GET['height'])) ? (int) $_GET['height'] : 0;



if (!$maxWidth && $maxHeight)
{
    $maxWidth	= 840;
}
elseif ($maxWidth && !$maxHeight)
{
    $maxHeight	= 2000;
}
elseif ($color && !$maxWidth && !$maxHeight)
{
    $maxWidth	= $width;
    $maxHeight	= $height;
}


// Ratio cropping
$offsetX	= 0;
$offsetY	= 0;

if (isset($_GET['cropratio']))
{
    $cropRatio		= explode(':', (string) $_GET['cropratio']);
    if (count($cropRatio) == 2)
    {
        $ratioComputed		= $width / $height;
        $cropRatioComputed	= (float) $cropRatio[0] / (float) $cropRatio[1];

        if ($ratioComputed < $cropRatioComputed)
        { // Image is too tall so we will crop the top and bottom
            $origHeight	= $height;
            $height		= $width / $cropRatioComputed;
            $offsetY	= ($origHeight - $height) / 2;
            //default to zero
            $offsetY	= 0;

        }
        else if ($ratioComputed > $cropRatioComputed)
        { // Image is too wide so we will crop off the left and right sides
            $origWidth	= $width;
            $width		= $height * $cropRatioComputed;
            $offsetX	= ($origWidth - $width) / 2;
            $offsetX	= 0;
        }
    }
}

// Setting up the ratios needed for resizing. We will compare these below to determine how to
// resize the image (based on height or based on width)
$xRatio		= $maxWidth / $width;
$yRatio		= $maxHeight / $height;

if ($xRatio * $height < $maxHeight)
{ // Resize the image based on width
    $tnHeight	= ceil($xRatio * $height);
    $tnWidth	= $maxWidth;
}
else // Resize the image based on height
{
    $tnWidth	= ceil($yRatio * $width);
    $tnHeight	= $maxHeight;
}

// Determine the quality of the output image
$quality	= (isset($_GET['quality'])) ? (int) $_GET['quality'] : DEFAULT_QUALITY;
/*if($_GET['width'] < 200) {$quality	= 40;}*/

// Before we actually do any crazy resizing of the image, we want to make sure that we
// haven't already done this one at these dimensions. To the cache!
// Note, cache must be world-readable

// We store our cached image filenames as a hash of the dimensions and the original filename
$resizedImageSource		= $tnWidth . 'x' . $tnHeight . 'x' . $quality;
if ($color)
    $resizedImageSource	.= 'x' . $color;
if (isset($_GET['cropratio']))
    $resizedImageSource	.= 'x' . (string) $_GET['cropratio'];
$resizedImageSource		.= '-' . $image;

// We don't want to run out of memory
ini_set('memory_limit', MEMORY_TO_ALLOCATE);

// Set up a blank canvas for our resized image (destination)
$dst	= imagecreatetruecolor($tnWidth, $tnHeight);

// Set up the appropriate image handling functions based on the original image's mime type
switch ($size['mime'])
{
    case 'image/gif':
        // We will be converting GIFs to PNGs to avoid transparency issues when resizing GIFs
        // This is maybe not the ideal solution, but IE6 can suck it
        $creationFunction	= 'ImageCreateFromGif';
        $outputFunction		= 'ImagePng';
        $mime				= 'image/png'; // We need to convert GIFs to PNGs
        $doSharpen			= FALSE;
        $quality			= round(10 - ($quality / 10)); // We are converting the GIF to a PNG and PNG needs a compression level of 0 (no compression) through 9
        break;

    case 'image/x-png':
    case 'image/png':
        $creationFunction	= 'ImageCreateFromPng';
        $outputFunction		= 'ImagePng';
        $doSharpen			= FALSE;
        $quality			= round(10 - ($quality / 10)); // PNG needs a compression level of 0 (no compression) through 9
        break;

    default:
        $creationFunction	= 'ImageCreateFromJpeg';
        $outputFunction	 	= 'ImageJpeg';
        $doSharpen			= TRUE;
        break;
}

// Read in the original image
$src	= $creationFunction($image);

if (in_array($size['mime'], array('image/gif', 'image/png')))
{
    if (!$color)
    {
        // If this is a GIF or a PNG, we need to set up transparency
        imagealphablending($dst, false);
        imagesavealpha($dst, true);
    }
    else
    {
        // Fill the background with the specified color for matting purposes
        if ($color[0] == '#')
            $color = substr($color, 1);

        $background	= FALSE;

        if (strlen($color) == 6)
            $background	= imagecolorallocate($dst, hexdec($color[0].$color[1]), hexdec($color[2].$color[3]), hexdec($color[4].$color[5]));
        else if (strlen($color) == 3)
            $background	= imagecolorallocate($dst, hexdec($color[0].$color[0]), hexdec($color[1].$color[1]), hexdec($color[2].$color[2]));
        if ($background)
            imagefill($dst, 0, 0, $background);
    }
}


// Resample the original image into the resized canvas we set up earlier
ImageCopyResampled($dst, $src, 0, 0, $offsetX, $offsetY, $tnWidth, $tnHeight, $width, $height);


// Write the resized image to the cache
$outputFunction($dst, $resized, $quality);

// Put the data of the resized image into a variable
ob_start();
$outputFunction($dst, null, $quality);
$data	= ob_get_contents();
ob_end_clean();

// Clean up the memory
ImageDestroy($src);
ImageDestroy($dst);