✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Carregar e compactar várias imagens em PHP

39

Recentemente, um de nossos leitores perguntou como fazer upload e compactar várias imagens em PHP. Existem certos cenários em que precisamos permitir que os usuários façam upload de várias imagens. É sempre uma boa prática otimizar as imagens no momento do upload. Neste artigo, estudamos o upload de várias imagens e como compactá-las durante o processo de upload.

Por que precisamos reduzir o tamanho do arquivo de imagem?

Sem dúvida, as imagens desempenham um papel importante no seu site. Imagens atraentes chamam a atenção dos leitores e eles passam mais tempo no site. Mas, ao mesmo tempo, imagens grandes tornam seu site mais lento. Como leva mais largura de banda, seu site leva mais tempo para carregar as páginas da web. Os proprietários do site devem prestar atenção para reduzir o tamanho do arquivo de imagem e usar a melhor ferramenta de compactação de imagem para isso.

Vou mostrar 2 maneiras de compactar imagens – TinyPNG e o pacote artisansweb / otimizador de imagens.

TinyPNG é um dos populares serviços de compressão de imagens da web. Este serviço permite compactar 500 imagens por mês gratuitamente por meio de suas APIs. Por mais de 500 imagens, você precisa pagá-las.

Se você tiver que otimizar mais de 500 imagens por mês e não quiser pagar, use o pacote ‘artisansweb / image-optimizer’. Este pacote usa o serviço reSmush.it para otimização de imagem.

Eu recomendaria tentar as duas soluções, comparar a saída e escolher aquela que for adequada para você.

Dito isso, vamos dar uma olhada em como compactar imagens após enviá-las.

Introdução ao TinyPNG

Para começar, você precisa obter uma chave de API do TinyPNG. Clique aqui para obter sua chave API. Você só precisa inserir seu nome e endereço de e-mail e receberá o e-mail para sua chave.

Carregar e compactar várias imagens em PHP

Depois de obter sua chave de desenvolvedor, instale uma biblioteca PHP fornecida pelo TinyPNG. Você deve ter o Composer instalado no sistema para instalar a biblioteca. Abra o terminal no diretório raiz do seu projeto e execute o comando:

composer require tinify/tinify

Como compactar imagens usando TinyPNG

Conforme mencionado no título deste artigo, veremos como fazer upload e compactar várias imagens. Para isso, precisamos criar um formulário HTML que tenha entrada de arquivo para navegar por várias imagens. Crie index.phpe coloque o código abaixo nele.

index.php

<form method="post" enctype="multipart/form-data" action="process_images.php">
    <p>
        <label>Upload Images</label>
        <input type="file" name="images[]" accept="image/*" multiple>
    </p>
    <button type="submit" name="submit">Submit</button>
</form>

Para o arquivo de entrada eu dei um nome como imagens []. Isso ocorre porque, no lado do servidor, precisamos de uma série de arquivos, pois o usuário navegará em várias imagens.

Assim que navegarmos pelas imagens e clicarmos no botão enviar, os dados do formulário serão enviados para o arquivo process_images.php. Este é o arquivo onde precisamos escrever um código para enviar e compactar imagens.

process_images.php

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
TinifysetKey("YOUR_API_KEY");
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image using TinyPNG
            try {
                $source = TinifyfromFile(getcwd().'/uploads/'.$filename_to_store);
                $source->toFile(getcwd().'/uploads/'.$filename_to_store);
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Certifique-se de substituir o espaço reservado pela sua chave de API real. No código acima, estamos gerando um nome de arquivo exclusivo acrescentando tempo a ele. Assim que uma imagem é carregada para o servidor, enviamos a imagem para a API TinyPNG para otimização. Em troca, obtemos a versão compactada da imagem que armazenamos no mesmo local e com o mesmo nome de arquivo.

Compactar imagens usando o pacote artisansweb / image-optimizer

Eu desenvolvi o pacote Image Optimizer. Este pacote usa o serviço reSmush.it sob o capô para otimizar imagens. Se você está procurando um serviço gratuito, experimente este pacote. O reSmush.it otimizou bilhões de imagens até agora. Este pacote não requer o fornecimento de nenhuma chave ou registro. Basta conectá-lo e pronto.

Para começar a usar o pacote Image Optimizer, instale-o usando o comando:

composer require artisansweb/image-optimizer

Em seguida, o código no process_image.phpserá modificado da seguinte maneira.

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
 
use ArtisansWebOptimizer;
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image
            try {
                $img = new Optimizer();
                $source = getcwd().'/uploads/'.$filename_to_store;
                $img->optimize($source);
 
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Espero que você entenda como fazer upload e compactar várias imagens em PHP. Eu gostaria de ouvir seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação