Pergunta

Eu tenho um monte de arquivos PNG de alta qualidade. Eu quero usar o PHP para convertê-los em JPG porque ele é de arquivos menores, mantendo a qualidade. Eu quero mostrar os arquivos JPG na web.

O PHP tem funções / bibliotecas para fazer isso? É a qualidade / compressão bom?

Foi útil?

Solução

Faça isso para converter com segurança um PNG para JPG com a transparência em branco.

$image = imagecreatefrompng($filePath);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 50; // 0 = worst / smaller file, 100 = better / bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality);
imagedestroy($bg);

Outras dicas

Tenha cuidado com o que você deseja converter. não JPG não suporta alfa-transparência enquanto PNG faz. Você vai perder essa informação.

Para converter, você pode usar a seguinte função:

// Quality is a number between 0 (best compression) and 100 (best quality)
function png2jpg($originalFile, $outputFile, $quality) {
    $image = imagecreatefrompng($originalFile);
    imagejpeg($image, $outputFile, $quality);
    imagedestroy($image);
}

Esta função usa o imagecreatefrompng() e funções imagejpeg() da biblioteca GD.

Este é um pequeno exemplo que irá converter 'image.png' para 'image.jpg' em qualidade de imagem de 70%:

<?php
$image = imagecreatefrompng('image.png');
imagejpeg($image, 'image.jpg', 70);
imagedestroy($image);
?>

Espero que ajude

<?php
function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) {
    $explode = explode(".", $imageName);
    $filetype = $explode[1];

    if ($filetype == 'jpg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        $srcImg = imagecreatefrompng("$imageDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        $srcImg = imagecreatefromgif("$imageDirectory/$imageName");
    }

    $origWidth = imagesx($srcImg);
    $origHeight = imagesy($srcImg);

    $ratio = $origWidth / $thumbWidth;
    $thumbHeight = $origHeight / $ratio;

    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
    imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight);

    if ($filetype == 'jpg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        imagepng($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        imagegif($thumbImg, "$thumbDirectory/$imageName");
    }
}
    ?>

Este é um muito bom roteiro de miniaturas =) Aqui está um exemplo:

$ path = O caminho para a pasta onde a imagem original é. $ Name = O nome do arquivo que você quer fazer uma miniatura de. $ Thumbpath = O caminho para o diretório onde você deseja que a miniatura para ser salvos em. $ Maxwidth = a largura máxima da miniatura em PX por exemplo. 100 (wich será 100px).

createThumbnail($path, $name, $thumbpath, $maxwidth);

Você pode querer olhar para Imagem Magick , geralmente considerada a biblioteca padrão de fato para processamento de imagem. Requer um módulo php extra para ser instalado no entanto, não tenho certeza se qualquer / que estão disponíveis em uma instalação padrão.

HTH.

PHP tem algum href="http://docs.php.net/manual/en/book.image.php" imagem funções de processamento juntamente com o imagecreatefrompng e função imagejpeg . O primeiro irá criar uma representação interna de um arquivo de imagem PNG, enquanto o segundo é usado para salvar a representação como arquivo de imagem JPEG.

esta lista de bibliotecas de imagem php . Basicamente é GD ou Imagemagick.

Eu sei que não é uma resposta exata para o OP, mas como respostas já ser dada ...

Você realmente precisa fazer isso em PHP?
O que quero dizer é: se você precisa converter um monte de imagens, fazê-lo em PHP pode não ser a melhor maneira: você vai ser confrontado com memory_limit, max_execution_time, ...

Também gostaria de dizer GD não pode obter-lhe o melhor relação qualidade / tamanho; mas não tenho certeza sobre isso (se você fizer uma comparação entre GD e outras soluções, estou muito interessado pelos resultados ;-))

Outra abordagem, não utilizando PHP, seria usar Imagem Magick via linha de comando (e não como uma extensão do PHP como outras pessoas sugeriram)

Você teria que escrever um shell-script que passa por todos os arquivos .png, e dá-los a qualquer

  • convert para criar um novo arquivo .jpg para cada arquivo .png
  • mogrify para diretamente o trabalho no arquivo original e substituí-lo.


Como nota: se você estiver fazendo isso diretamente no servidor de produção, você pode colocar um pouco de tempo de sono entre cachos de conversões, para deixá-lo esfriar um pouco, às vezes ^^


Eu tenho usar o script shell + convert / mogrify algumas vezes (tê-los correr para algo como 10 horas uma vez) , e eles fazem o trabalho muito bem: -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top