change image from png to jpg with php

3

Galera I put together a PHP script that uploads a photo. The problem is that I need to convert it to jpg and to the size of 280px x 280px. Does anyone know how to do this? I have to save as much disk space as possible.

Follows:

<?php

// Recebe a imagem 
$imagem = $_FILES["imagem"];

// Verifica se tem imagem
if (!empty($imagem)) {

// Obtem o tamaho do arquivo
$tamanho = $imagem['size'];

// Tranforma em array o nome do arquivo
$arrArquivo = explode('.', $imagem['name']);

// Obtem a extensão do arquivo
$fileExtencion = trim($arrArquivo [count($arrArquivo) - 1]);

// Array com as extensões permitidas
$arrExtPermitidas = array('JPG', 'PNG');

// Caso a extensão não for permitida
if (!in_array(strtoupper($fileExtencion), $arrExtPermitidas)) {
    ?>
    <script>
        alert('ATENÇÃO. Formato da imagem não é suportado. Use apenas JPG,PNG.');
        history.back();
    </script>
    <?php

    die;
}

// Verifica se o diretório existe   
if (!is_dir("Arquivos/Produtos")) {
    mkdir("Arquivos/Produtos", 0775, true);
}

// Diretorio dos arquivos
$pasta_dir = "Arquivos/Produtos/";

// Definindo o destino do arquivo
$arquivo_nome = $pasta_dir . 'foto' . '.' . $fileExtencion;

// Faz o upload da imagem
move_uploaded_file($imagem["tmp_name"], $arquivo_nome);

} 
    
asked by anonymous 14.06.2016 / 21:53

2 answers

4

You will need:

After the move_uploaded_file, verify that the extension is PNG. If it is:

$imagem = imagecreatefrompng($arquivo_nome); //cria uma imagem PNG a partir do caminho
$w = imagesx($imagem); //largura da imagem original
$h = imagesy($imagem); //altura da imagem original
$temp = imagecreatetruecolor(280, 280); //Cria uma imagem 280x280 vazia
imagecopyresized($temp, $imagem, 0, 0, 0, 0, 280, 280, $w, $h); //Copia a imagem original já redimensionada pra imagem que estava vazia
imagejpeg($temp, $pasta_dir . 'foto' . '.jpg', 90); //Converte e salva como JPG com qualidade 90
//imagino que tu vá colocar algo entre 'foto' e a extensão pra diferenciar os nomes dos arquivos
imagedestroy($imagem);
imagedestroy($temp);
    
14.06.2016 / 22:38
0

As a complement to the answer, I suggest that you use a library that facilitates the image processing process.

The PHP GD library, as quoted in one of the answers, is very good. However I believe that if you have to do a simple operation over and over again it becomes tiring, since the passage of parameters to it is extensive! (it has the function of gd that you need to pass some nine parameters)

You can simplify your life, for example, by using the Gregwar\Image library. I use and recommend it.

To install, you use composer

php composer.phar require gregwar/image

Then, just use it:

use Gregwar\Image\Image;

Image::open($imagem["tmp_name"])
          ->resize(288, 288)
          ->save('nome_de_destino.jpg', 'jpg');

In the save method, you can optionally pass a third argument, which is the jpg quality you want to save to the image.

As I said, that way you have to do "less effort", making the operation and code simpler.

    
22.08.2016 / 15:24