上传图像并使用php调整大小后,上传的图像为黑色

时间:2019-08-12 01:35:57

标签: php image upload

我通常使用此代码上传图像,并且可以正常工作,但是几天前,它开始在新服务器上给我带来问题,当加载图像(尤其是jpeg图像或来自iPhone或Mac的图像)时,它加载的图像是全黑。 正确更改尺寸,但图像为黑色。

这是我在多产的学校和个人中使用php上传图像的代码,以前没有问题。 所以我不知道是否是因为PHP版本的更改

<?php
$exp = explode(".", $_FILES["image"]["name"]);
    if($_FILES['image']['name'] != ""){ // El campo foto contiene una imagen...
        // Primero, hay que validar que se trata de un JPG/GIF/PNG
        $allowedExts = array("jpg", "jpeg", "gif", "png", "JPG", "GIF", "PNG");
        $extension = end($exp);
        if ((($_FILES["image"]["type"] == "image/gif")
                || ($_FILES["image"]["type"] == "image/jpeg")
                || ($_FILES["image"]["type"] == "image/png")
                || ($_FILES["image"]["type"] == "image/pjpeg"))
                && in_array($extension, $allowedExts)) {
            // el archivo es un JPG/GIF/PNG, entonces...
            $extension = end($exp);
            $foto = substr(md5(uniqid(rand())),0,10).".".$extension;
            $directorio = "CLIENTES"; // directorio de tu elección
            // almacenar imagen en el servidor
            move_uploaded_file($_FILES['image']['tmp_name'], $directorio.'/'.$foto);
            $resFoto = 'res_'.$foto;
            resizeImagen($directorio.'/', $foto, 500, 500,$resFoto,$extension);
            unlink($directorio.'/'.$foto);
            $_SESSION['ERROR']="Se cargo correctamente !!!";
            $OK="1";
        } else { // El archivo no es JPG/GIF/PNG
            $OK="0";
            $_SESSION['ERROR']="No tiene un formato compatible !!!";
          }
    } else { // El campo foto NO contiene una imagen
        $OK="0";
        $_SESSION['ERROR']="No se selecciono archivo!!!";
    }


####
## Función para redimencionar las imágenes
## utilizando las liberías de GD de PHP
####

function resizeImagen($ruta, $nombre, $alto, $ancho,$nombreN,$extension){
    $rutaImagenOriginal = $ruta.$nombre;
    if($extension == 'GIF' || $extension == 'gif'){
    $img_original = imagecreatefromgif($rutaImagenOriginal);
    }
    if($extension == 'jpg' || $extension == 'JPG'){
    $img_original = imagecreatefromjpeg($rutaImagenOriginal);
    }
    if($extension == 'png' || $extension == 'PNG'){
    $img_original = imagecreatefrompng($rutaImagenOriginal);
    }
    $max_ancho = $ancho;
    $max_alto = $alto;
    list($ancho,$alto)=getimagesize($rutaImagenOriginal);
    $x_ratio = $max_ancho / $ancho;
    $y_ratio = $max_alto / $alto;
    if( ($ancho <= $max_ancho) && ($alto <= $max_alto) ){//Si ancho 
    $ancho_final = $ancho;
        $alto_final = $alto;
    } elseif (($x_ratio * $alto) < $max_alto){
        $alto_final = ceil($x_ratio * $alto);
        $ancho_final = $max_ancho;
    } else{
        $ancho_final = ceil($y_ratio * $ancho);
        $alto_final = $max_alto;
    }
    $tmp=imagecreatetruecolor($ancho_final,$alto_final);
    imagecopyresampled($tmp,$img_original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
    imagedestroy($img_original);
    $calidad=70;
    imagejpeg($tmp,$ruta.$nombreN,$calidad);

}

$img=$directorio;
$img.="/";
$img.=$resFoto;
?>

我唯一的错误是加载的图像完全是黑色的。

1 个答案:

答案 0 :(得分:0)

进行此类工作时遇到的相同问题。我正在使用此类:

library(dplyr)
bind_rows(purrr::map(L, bind_rows), .id = "id")  %>%
          mutate(id = match(id, unique(id)))

所以我评论了resize1()函数并创建了新的resize()函数。请检查它是否还能帮助您。