Resize image with PHP before uploading to the image server

Asked

Viewed 53 times

1

I have a small problem. I want to limit the size of the image to be sent to the server and also its resolution in pixels. for example, set a maximum size of 1mb per image, and maximum resolution 500x500.

I currently use this code to try to do this

if ( isset( $_FILES[ 'arquivo' ][ 'name' ] ) && $_FILES[ 'arquivo' ][ 'error' ] == 0 )
{
    $arquivo_tmp = $_FILES[ 'arquivo' ][ 'tmp_name' ];
    $nome = $_FILES[ 'arquivo' ][ 'name' ];
    // Pega a extensão
    $extensao = pathinfo ( $nome, PATHINFO_EXTENSION );
    // Converte a extensão para minúsculo
    $extensao = strtolower ( $extensao );
    // Somente imagens, .jpg;.jpeg;.gif;.png
    // Aqui eu enfileiro as extensões permitidas e separo por ';'
    // Isso serve apenas para eu poder pesquisar dentro desta String
    if ( strstr ( '.jpg;.jpeg;.gif;.png', $extensao ) ) {
        // Cria um nome único para esta imagem
        // Evita que duplique as imagens no servidor.
        // Evita nomes com acentos, espaços e caracteres não alfanuméricos
        $novoNome = uniqid ( time () ) . '.' . $extensao;

        // Concatena a pasta com o nome
        $destino = '../../imagensDb/'.$novoNome;

        // tenta mover o arquivo para o destino
        if ( @move_uploaded_file ( $arquivo_tmp, $destino ) ) {
            $img = $novoNome;
        }
    }
}

1 answer

3


Utilize $_FILES['arquivo']['size'] to check the size of the image directly in the code, in case you need to use the file upload settings in the php.ini, the value returned is in bytes, of the file sent. For the dimensions use the function getimagesize, passing as parameter $_FILES['arquivo']["tmp_name"]

if (isset($_FILES['arquivo']['name']) && $_FILES['arquivo']['error'] == 0) {
    $arquivo_tmp = $_FILES['arquivo']['tmp_name'];
    $nome = $_FILES['arquivo']['name'];
    // Pega a extensão
    $extensao = pathinfo($nome, PATHINFO_EXTENSION);
    // Converte a extensão para minúsculo
    $extensao = strtolower($extensao);
    // Somente imagens, .jpg;.jpeg;.gif;.png
    // Aqui eu enfileiro as extensões permitidas e separo por ';'
    // Isso serve apenas para eu poder pesquisar dentro desta String
    if (strstr('.jpg;.jpeg;.gif;.png', $extensao)) {

        $msg = "";

        if ($_FILES['arquivo']['size'] > 1000000) {
            $msg = "Tamanho Máximo da imagem foi ultrapassado, sendo permitido até 1MB";
        }

        $imageinfo = getimagesize($_FILES['arquivo']["tmp_name"]);
        $largura = $imageinfo[0];
        $altura = $imageinfo[1];

        if ($msg = "" && ($largura < 500 && $altura < 500)) {
            $msg = "Dimensão não permitida.";
        }

        if ($msg == "") {
            // Cria um nome único para esta imagem
            // Evita que duplique as imagens no servidor.
            // Evita nomes com acentos, espaços e caracteres não alfanuméricos
            $novoNome = uniqid(time()) . '.' . $extensao;

            // Concatena a pasta com o nome
            $destino = '../../imagensDb/' . $novoNome;

            // tenta mover o arquivo para o destino
            if (@move_uploaded_file($arquivo_tmp, $destino)) {
                $img = $novoNome;
            }
        } else {
            echo $msg;
        }
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.