Jump to content

Image resize and cache on the fly


GalaxyTramp

Recommended Posts

I am using the following script on a couple of websites and it works well:

 

<?php

//////////////////////////////////////////////////////  THIS IS THE FUNCTION_RESIZE.PHP FILE ///////////////////////////////////////////////////////////////////////////////////////

/*
function by Wes Edling .. http://joedesigns.com
feel free to use this in any project, i just ask for a credit in the source code.
a link back to my site would be nice too.
*/

function resize($imagePath,$opts=null){

    # start configuration
    
    $cacheFolder = './cache/'; # path to your cache folder, must be writeable by web server
    $remoteFolder = $cacheFolder.'remote/'; # path to the folder you wish to download remote images into
    $quality = 90; # image quality to use for ImageMagick (0 - 100)
    
    $cache_http_minutes = 20;     # cache downloaded http images 20 minutes

    $path_to_convert = '/usr/bin/convert'; 
    
    ## you shouldn't need to configure anything else beyond this point

    $purl = parse_url($imagePath);
    $finfo = pathinfo($imagePath);
    $ext = $finfo['extension'];

    # check for remote image..
    if(isset($purl['scheme']) && $purl['scheme'] == 'http'):
        # grab the image, and cache it so we have something to work with..
        list($filename) = explode('?',$finfo['basename']);
        $local_filepath = $remoteFolder.$filename;
        $download_image = true;
        if(file_exists($local_filepath)):
            if(filemtime($local_filepath) < strtotime('+'.$cache_http_minutes.' minutes')):
                $download_image = false;
            endif;
        endif;
        if($download_image == true):
            $img = file_get_contents($imagePath);
            file_put_contents($local_filepath,$img);
        endif;
        $imagePath = $local_filepath;
    endif;

    if(file_exists($imagePath) == false):
        $imagePath = $_SERVER['DOCUMENT_ROOT'].$imagePath;
        if(file_exists($imagePath) == false):
            return 'image not found';
        endif;
    endif;

    if(isset($opts['w'])): $w = $opts['w']; endif;
    if(isset($opts['h'])): $h = $opts['h']; endif;

    $filename = md5_file($imagePath);

    if(!empty($w) and !empty($h)):
        $newPath = $cacheFolder.$filename.'_w'.$w.'_h'.$h.(isset($opts['crop']) && $opts['crop'] == true ? "_cp" : "").(isset($opts['scale']) && $opts['scale'] == true ? "_sc" : "").'.'.$ext;
    elseif(!empty($w)):
        $newPath = $cacheFolder.$filename.'_w'.$w.'.'.$ext;    
    elseif(!empty($h)):
        $newPath = $cacheFolder.$filename.'_h'.$h.'.'.$ext;
    else:
        return false;
    endif;

    $create = true;

    if(file_exists($newPath) == true):
        $create = false;
        $origFileTime = date("YmdHis",filemtime($imagePath));
        $newFileTime = date("YmdHis",filemtime($newPath));
        if($newFileTime < $origFileTime):
            $create = true;
        endif;
    endif;

    if($create == true):
        if(!empty($w) and !empty($h)):

            list($width,$height) = getimagesize($imagePath);
            $resize = $w;
        
            if($width > $height):
                $resize = $w;
                if(isset($opts['crop']) && $opts['crop'] == true):
                    $resize = "x".$h;                
                endif;
            else:
                $resize = "x".$h;
                if(isset($opts['crop']) && $opts['crop'] == true):
                    $resize = $w;
                endif;
            endif;

            if(isset($opts['scale']) && $opts['scale'] == true):
                $cmd = $path_to_convert." ".$imagePath." -resize ".$resize." -quality ".$quality." ".$newPath;
            else:
                $cmd = $path_to_convert." ".$imagePath." -resize ".$resize." -size ".$w."x".$h." xc:".(isset($opts['canvas-color'])?$opts['canvas-color']:"transparent")." +swap -gravity center -composite -quality ".$quality." ".$newPath;
            endif;
                        
        else:
            $cmd = $path_to_convert." ".$imagePath." -thumbnail ".(!empty($h) ? 'x':'').$w."".(isset($opts['maxOnly']) && $opts['maxOnly'] == true ? "\>" : "")." -quality ".$quality." ".$newPath;
        endif;

        $c = exec($cmd);
        
    endif;

    # return cache file path
    return str_replace($_SERVER['DOCUMENT_ROOT'],'',$newPath);
    
}

////////////////////////////////////////////////////////////////  THIS IS THE EXAMPLE.PHP FILE //////////////////////////////////////////////////////////////////////////////////////////////////////////

<?php
# include the function here
include 'function.resize.php';

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>PHP Image Resize - Example</title>
    <style>
        body { 
            background: #ffffff; 
            color: #121212; 
            font-family: lucida grande; 
            text-align: center; 
        }
        h1 { font-size: 15px; text-align: center; }
        #main { margin: auto; width: 600px; text-align: left; }
        .block { margin: 20px; background: #fafafa; padding: 20px; text-align: center; border: 1px solid #cacaca; }
        pre { text-align: left; background: #010101; padding: 10px; font-size: 11px; }
        pre code { text-align: left; color: #ffffff; }
        .block p { color: #343434; font-size: 12px; }
    </style>
</head>

<body>

<div id='main'>

    <h1>PHP Image Resizer</h1>


    <div class='block'>
        <?php $settings = array('w'=>150,'h'=>150,'crop'=>true); ?>
        <div><img src='<?=resize('http://www.image-online.com/admin.jpg',$settings)?>' border='0' /></div>
        <p>Image cropped & resized by width and height from a remote location.</p>
        <div><pre><code>src: http://www.image-online.com/admin.jpg<?php echo "\n\n"; print_r($settings)?></code></pre></div>
    </div>

</div>

</body>
</html>

?>

 

I now need the script to be able to resize images created dynamically from URL's in the following format: http://www.image-online.com/ShowImage.asp?SecId=zc&Id=P1&ImgId=03073

 

Is there any way of accessing the image created at this URL in order that I can manipulate it with this or another script.

 

Regards

 

GT

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.