$pic_exists = false;
$pic_local = false;
if (strpos($pic_fullpath, $server_path) !== false || @file_exists($pic_fullpath)) {
    $pic_local = true;
    $pic_localpath = str_replace($server_path, '', $pic_fullpath);
    if (@file_exists($pic_localpath)) {
        // Mighty Gorgon - Are we sure that this won't cause other issues??? Test please...
        $pic_fullpath = $pic_localpath;
        $pic_exists = true;
    } else {
        if (@file_exists(array_shift(explode('?', basename($pic_localpath))))) {
            $pic_exists = true;
        }
    }
}
if (!$pic_exists && any_url_exists($pic_fullpath)) {
    $pic_exists = true;
}
if (!$pic_exists) {
    image_no_thumbnail('thumb_' . $pic_title_reg . '.' . $pic_filetype);
    exit;
}
if ($image_processed == false) {
    $pic_size = get_full_image_info($pic_fullpath, null, $pic_local);
    if (empty($pic_size)) {
        image_no_thumbnail('thumb_' . $pic_title_reg . '.' . $pic_filetype);
        exit;
    }
    $pic_width = $pic_size['width'];
    $pic_height = $pic_size['height'];
    $pic_filetype = strtolower($pic_size['type']);
/**
* mixed get_full_image_info(file $file [, string $out])
*
* Returns information about $file.
*
* If the second argument is supplied, a string representing that information will be returned.
*
* Valid values for the second argument are IMAGE_WIDTH, 'width', IMAGE_HEIGHT, 'height', IMAGE_TYPE, 'type',
* IMAGE_ATTR, 'attr', IMAGE_BITS, 'bits', IMAGE_CHANNELS, 'channels', IMAGE_MIME, and 'mime'.
*
* If only the first argument is supplied an array containing all the information is returned,
* which will look like the following:
*
*    [width] => int (width),
*    [height] => int (height),
*    [type] => string (type),
*    [attr] => string (attributes formatted for IMG tags),
*    [bits] => int (bits),
*    [channels] => int (channels),
*    [mime] => string (mime-type)
*
* Returns false if $file is not a file, no arguments are supplied, $file is not an image, or otherwise fails.
*
**/
function get_full_image_info($file = null, $out = null, $local = false)
{
    // If $file is not supplied or is not a file, warn the user and return false.
    if ($local == true) {
        if (is_null($file) || !is_file($file)) {
            //echo '<p><b>Warning:</b> image_info() => first argument must be a file.</p>';
            //echo '<br /><br />' . $file . '<br /><br />';
            return false;
        }
    } else {
        if (is_null($file) || !any_url_exists($file)) {
            //echo '<p><b>Warning:</b> image_info() => first argument must be a file.</p>';
            //echo '<br /><br />' . $file . '<br /><br />';
            return false;
        }
    }
    // Defines the keys we want instead of 0, 1, 2, 3, 'bits', 'channels', and 'mime'.
    $redefine_keys = array('width', 'height', 'type', 'attr', 'bits', 'channels', 'mime');
    // If $out is supplied, but is not a valid key, nullify it.
    if (!is_null($out) && !in_array($out, $redefine_keys)) {
        $out = null;
    }
    // Assign useful values for the third index.
    $types = array(1 => 'GIF', 2 => 'JPG', 3 => 'PNG', 4 => 'SWF', 5 => 'PSD', 6 => 'BMP', 7 => 'TIFF(intel byte order)', 8 => 'TIFF(motorola byte order)', 9 => 'JPC', 10 => 'JP2', 11 => 'JPX', 12 => 'JB2', 13 => 'SWC', 14 => 'IFF', 15 => 'WBMP', 16 => 'XBM');
    $temp = array();
    $data = array();
    // Get the image info using getimagesize().
    // If $temp fails to populate, warn the user and return false.
    if (!($temp = @getimagesize($file))) {
        //echo '<p><b>Warning:</b> image_info() => first argument must be an image.</p>';
        return false;
    }
    // Get the values returned by getimagesize()
    $temp = array_values($temp);
    // Make an array using values from $redefine_keys as keys and values from $temp as values.
    foreach ($temp as $k => $v) {
        $data[$redefine_keys[$k]] = $v;
    }
    // Make 'type' useful.
    $data['type'] = $types[$data['type']];
    // Return the desired information.
    return !is_null($out) ? $data[$out] : $data;
}