我的第一个代码不起作用,第二个代码不起作用,但它们几乎相同。如何找到黑色缩略图的原因?

Posted

技术标签:

【中文标题】我的第一个代码不起作用,第二个代码不起作用,但它们几乎相同。如何找到黑色缩略图的原因?【英文标题】:My first code doesn't work, the second does but they're almost the same. How to find ther reason of the black thumbnails? 【发布时间】:2014-05-08 10:27:33 【问题描述】:

这是第一个代码。保存的缩略图在文件夹中,文件类型完美,大小完美,但缩略图是黑色的。

正如我所见,问题就在附近:header('Content-Type: image/jpeg'); 在此行之前,一切正常。

if (isset($_POST['rendben'])) 

    $tipusok = array("image/jpeg", "image/gif", "image/png");
    $bejovonev=mysql_real_escape_string(strip_tags(trim($_POST['nev'])));

    if (in_array($_FILES['kep']['type'], $tipusok) && $_FILES['kep']['size'] < 2000000 && (!empty($bejovonev)) ) 

        switch ($_FILES['kep']['type']) 
            case "image/jpeg": $kiterjesztes = ".jpg"; break;
            case "image/gif":  $kiterjesztes = ".gif"; break;
            case "image/png":  $kiterjesztes = ".png"; break;
        

        $nev = ekezettelenito($bejovonev);

        $eredeti    = $_FILES['kep']['name'];
        $ideiglenes = $_FILES['kep']['tmp_name'];
        $tipus      = $_FILES['kep']['type'];
        $hiba       = $_FILES['kep']['error'];
        $meret      = $_FILES['kep']['size'];

        $kimenet = "<p>A fájl tulajdonságai:</p>
        <ul>
            <li>név: $nev</li>
            <li>típus: $tipus</li>
            <li>ideiglenes név: $ideiglenes</li>
            <li>hiba száma: $hiba</li>
            <li>mérete: ".round($meret/1024)." KByte</li>
        </ul>\n";
        move_uploaded_file($ideiglenes, "../kepek/nagykepek/$nev.$kiterjesztes");

        //Thumbnails

        $new=142;
        $picture="../kepek/nagykepek/$nev$kiterjesztes";

            switch ($kiterjesztes) 
            case ".jpg": $orig=imagecreatefromjpeg($picture); break;
            case ".gif":  $orig=imagecreatefromgif($picture); break;
            case ".png":  $orig=imagecreatefrompng($picture); break;
        

        list($width, $height) = getimagesize($picture);
        $crop= ($width>$height) ? $height: $width; 
        $dest= imagecreatetruecolor($new,$new);
        imagecopyresampled($dest, $orig, 0, 0, 0, 0, $new, $new, $crop, $crop);

        switch ($kiterjesztes) 
            case ".jpg": header('Content-Type: image/jpeg'); break;
            case ".gif": header('Content-Type: image/gif'); break;
            case ".png": header('Content-Type: image/png'); break;
        
        switch ($kiterjesztes) 
            case ".jpg": imagejpeg($dest,"../kepek/kiskepek/$nev$kiterjesztes"); break;
            case ".gif": imagegif($dest,"../kepek/kiskepek/$nev$kiterjesztes"); break;
            case ".png": imagepng($dest,"../kepek/kiskepek/$nev$kiterjesztes"); break;
        

    
    else 
        $kimenet = "<p><em>Érvénytelen fájlformátum vagy fájlnév!</em></p>\n";
    


//Output

$konyvtar = "../kepek/kiskepek/";
$tartalom = scandir($konyvtar);
$tipusok  = array(".jpg", ".gif", ".png");
$kepek    = "";

foreach ($tartalom as $fajl) 
    if (in_array(substr($fajl, -4), $tipusok)) 
        $kepek.= "<img src=\"$konyvtar$fajl\" alt=\"$fajl\" />\n";
    

?><!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php if (isset($kimenet)) print $kimenet; ?>
<form method="post" action="" enctype="multipart/form-data">
    <p>Név:<br />
    <input type="text" id="nev" name="nev" /></p>
    <p>Kép:<br />
    <input type="file" id="kep" name="kep" /></p>
    <p><input type="submit" id="rendben" name="rendben" value="Rendben" />
    </p>
</form>
<?php print $kepek; ?>
</body>
</html>

这是我的第二个代码。它适用于所有三种图像类型。

<?php  

//$nev="asd2.jpg";  
//$nev="asd2.png";  
$nev="asd2.gif";  

$new=142;  

//$picture="111.jpg";  
//$picture="asdasd.png";  
$picture="xx.gif";  

//$orig=imagecreatefromjpeg($picture);  
//$orig=imagecreatefrompng($picture);  
$orig=imagecreatefromgif($picture);  

list($width, $height) = getimagesize($picture);  

$crop= ($width>$height) ? $height: $width;   

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

imagecopyresampled($dest, $orig, 0, 0, 0, 0, $new, $new, $crop, $crop);  

//header('Content-Type: image/jpeg');  
//header('Content-Type: image/png');  
header('Content-Type: image/gif');  

imagejpeg($dest,"../kepek/kiskepek/$nev");  

?>  

我真的不知道问题出在哪里。我怎样才能找到它?我尝试了 print、print_r、var_dump,但一切似乎都很正常。

【问题讨论】:

在标题中你说第一个代码块有效。在问题中,您说第二个代码块有效。是哪个? 谢谢。第二个有效,第一个无效。 【参考方案1】:

你的问题解决了吗? 如果没有,您可以在这里查看:

在这一行中,您使用某个名称保存图像

move_uploaded_file($ideiglenes, "../kepek/nagykepek/$nev.$kiterjesztes");
                                                          ^  //important

还有名字,就像

 nameimg..jpg
         ^

并且,您使用此行来调用图像:

$picture="../kepek/nagykepek/$nev$kiterjesztes";
                                   ^  //no dot here

最后一行调用一张图片

 nameimg.jpg

所以,您应该会收到一些错误消息,或者如果您禁用显示它们,您将获得黑色图像...

【讨论】:

我修好了,但问题是标题。我仍然不知道它有什么问题,但是我删除了标题行并且它起作用了。后来我注意到这两个点,但它们不是问题,因为第一个点是图像名称的最后一个字符。无论如何我纠正了它,但谢谢你:)

以上是关于我的第一个代码不起作用,第二个代码不起作用,但它们几乎相同。如何找到黑色缩略图的原因?的主要内容,如果未能解决你的问题,请参考以下文章

我的 CustomDeserializer 类在同一类的第二个字段上第二次不起作用

按钮单击在 Python 中的第二个类/布局中不起作用

Swift UrlSession 在 UrlSession 中不起作用

表单中的第二个输入框第二次不起作用

从 TableViewController 到嵌入在 NavController 中的第二个 TVC 的 performSegueWithIdentifier 不起作用

第二个存在条件不起作用