Загрузка изображений, создание превью. Трабла в Ie

Discussion in 'PHP' started by NNNS, 22 Nov 2007.

  1. NNNS

    NNNS Elder - Старейшина

    Joined:
    26 May 2007
    Messages:
    44
    Likes Received:
    28
    Reputations:
    -5
    Проблема с созданием превью изображений в IE.
    В Mozilla Firefox все работает без траблем. Нужен хелп по устранению баги.

    При загрузке изобржения, оно сейвится в /images/
    Из загруженого изображения создается превью изображение.
    Имена файлов сохраняются в бд.
    В Фаерфоксе Все работает без проблем
    В ИЕ изображение загружается в /images/ и дальше дело не идёт.

    PHP:
    <?php
    #error_reporting(0);
    include_once("config.php");
    $id = $_POST['id'];
    $id = intval($id);
            function 
    makepic($fileinfo,$wwwdir)
        {
                    
    $allowed  = array ('gif','png','jpg');
                    
    $filename        = trim($fileinfo['name'], "\x00..\x1F");
                    
    $tmpname        = explode('.',$filename);                
                    
    $extension         = $tmpname[count($tmpname)-1];
                    
    $allowed         = in_array($extension,$allowed) ? true : false ;
                    if (
    $allowed)
                    {
                if (
    extension_loaded('gd'))
                            {
                                    list(
    $width, $height) = getimagesize($fileinfo['tmp_name']);
                                    
    $gdinfo        = gd_info();
                    
    $image        = imagecreatetruecolor($width, $height);                                   
                                    if (
    $extension == 'gif' && $gdinfo['GIF Create Support'] )
                    {
           
                        
    $nimage        = imagecreatefromgif($fileinfo['tmp_name']);                           
                        
    imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                        if (!
    imagegif($image, $wwwdir.$fileinfo['name'], 80))
                                            {
                                                    return 
    false;
                                            }
                    }
                                    if (
    $extension == 'jpg' and $gdinfo['JPG Support'] )
                    {
                        
    $nimage        = imagecreatefromjpeg($fileinfo['tmp_name']);                           
                        
    imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                        if (!
    imagejpeg($image, $wwwdir.$fileinfo['name'], 80))
                                            {
                                                    return 
    false;
                                            }
                                    }
                    if (
    $extension == 'png' && $gdinfo['PNG Support'] == 1 )
                    {
                        
    $nimage        = imagecreatefrompng($fileinfo['tmp_name']);                           
                        
    imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                        if (!
    imagepng($image, $wwwdir.$fileinfo['name'], 80))
                                            {
                                                    return 
    false;
                                            }
                    }
                                    return 
    true;
                            }
                            else
                            {
                                    return 
    true;
                            }
                    }
                    else
                    {
                            return 
    false;
                    }
                 
            }
            
           
            if (!empty(
    $_FILES))
            {
                    if (
    makepic($_FILES['userfile'],"$uploaddir"))
                    {
            
    $id == '1';
            list(
    $mus, $typer) = explode("/",$_FILES['userfile']['type']);
            if (
    $typer =="jpeg" || $typer == "pjpeg" || $typer == "jpg") {$ras = "jpg";}
            if (
    $typer == "gif" ) {$ras = "gif";}                
                    
    rename($uploaddir.$_FILES['userfile']['name'],$uploaddir.$id.".".$ras);
                    
    $new_name = $id.".".$ras;
    if (
    $typer=="jpeg" OR $typer=="jpg" OR $typer=="JPEG" OR $typer=="JPG")
    {
    thumb_jpeg($new_name);
    $image=$new_name;
    $thumbs="tmb_$image";
    $Link = mysql_connect ($Host, $User, $Password);
    $Query = "UPDATE $TableName SET image='$image', thumbs='$thumbs' where id='$id'";
    $Result = mysql_db_query ($DBName, $Query, $Link);
    mysql_close ($Link);
    #echo "<html><head><meta http-equiv=\"refresh\" content=\"3; url=index.php\"></head><body></body></html>";
    chmod ("images/$image",0775);}else{
            if(
    $typer=="gif" OR $typer=="GIF")
            {
    thumb_gif($new_name);
            
    $image=$new_name;
            
    $thumbs="tmb_".$image;
            
    chmod ("thumbs/$thumbs",0775);
    $Link = mysql_connect ($Host, $User, $Password);
    $Query = "UPDATE $TableName SET image='$image', thumbs='$thumbs' where id='$id'";
    $Result = mysql_db_query ($DBName, $Query, $Link);
    mysql_close ($Link);
    #echo "<html><head><meta http-equiv=\"refresh\" content=\"3; url=index.php\"></head><body></body></html>";

    } else {
    #print "<html><head><meta http-equiv=\"refresh\" content=\"0; url=index.php\"></head><body></body></html>";
    }
            }
        } else{
    #echo "<html><head><meta http-equiv=\"refresh\" content=\"0; url=index.php\"></head><body></body></html>";
    }
    }

    function 
    thumb_jpeg($image_name)
    {
    // f - имя файла
    // type - способ масштабирования
    // q - качество сжатия
    // src - исходное изображение
    // dest - результирующее изображение
    // w - ширниа изображения
    // ratio - коэффициент пропорциональности
    // str - текстовая строка

    if (!isset($q)) $q = 75;

    $w = 150;
    // создаём исходное изображение на основе исходного файла и опеределяем его размеры
    $src = imagecreatefromjpeg("images/$image_name");
    $w_src = imagesx($src);
    $h_src = imagesy($src);
    // вычисление пропорций
    $ratio = $w_src/$w;
    $w_dest = round($w_src/$ratio);
    $h_dest = round($h_src/$ratio);

    // создаём пустую картинку
    $dest = imagecreatetruecolor($w_dest,$h_dest);
    imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);

    $dest = imagecreatetruecolor($w,$w);

    // вырезаем квадратную серединку по x, если фото горизонтальное
    if ($w_src>$h_src)
    imagecopyresampled($dest, $src, 0, 0,round((max($w_src,$h_src)-min($w_src,$h_src))/2),0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

    // вырезаем квадратную верхушку по y,если фото вертикальное (хотя можно тоже серединку)
    if ($w_src<$h_src) imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w,min($w_src,$h_src), min($w_src,$h_src));

    // квадратная картинка масштабируется без вырезок
    if ($w_src==$h_src) imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);


    // вывод картинки и очистка памяти
    ImageJPEG($dest,"thumbs/tmb_".$image_name,$q);
    imagedestroy($dest);
    imagedestroy($src); }

    function 
    thumb_gif($image_name)
    {
    // q - качество сжатия
    // src - исходное изображение
    // dest - результирующее изображение
    // w - ширниа изображения
    // ratio - коэффициент пропорциональности
    // str - текстовая строка

    if (!isset($q)) $q = 75;

    $w = 150;
    // создаём исходное изображение на основе исходного файла и опеределяем его размеры
    $src = imagecreatefromgif("images/$image_name");
    $w_src = imagesx($src);
    $h_src = imagesy($src);
    // вычисление пропорций
    $ratio = $w_src/$w;
    $w_dest = round($w_src/$ratio);
    $h_dest = round($h_src/$ratio);

    // создаём пустую картинку
    $dest = imagecreatetruecolor($w_dest,$h_dest);
    imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);

    $dest = imagecreatetruecolor($w,$w);

    // вырезаем квадратную серединку по x, если фото горизонтальное
    if ($w_src>$h_src)
    imagecopyresampled($dest, $src, 0, 0,round((max($w_src,$h_src)-min($w_src,$h_src))/2),0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

    // вырезаем квадратную верхушку по y,если фото вертикальное (хотя можно тоже серединку)
    if ($w_src<$h_src) imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w,min($w_src,$h_src), min($w_src,$h_src));

    // квадратная картинка масштабируется без вырезок
    if ($w_src==$h_src) imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);


    // вывод картинки и очистка памяти
    imagegif($dest,"thumbs/tmb_".$image_name,$q);
    imagedestroy($dest);
    imagedestroy($src);
    }
           
    ?>
     
    3 people like this.
  2. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Картинка в базу попадает? Подкажи участок, который непосредственно выводит злополучную картинку.
     
  3. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    [x26]VOLAND, да всё верно... MySQL допускает такое написание, а между кавычек он вставляет значения переменных...