Domanda

Ho un sacco di file PNG di alta qualità. Voglio usare PHP per convertirli in JPG a causa delle sue dimensioni di file inferiori pur mantenendo la qualità. Voglio visualizzare i file JPG sul Web.

PHP ha funzioni / librerie per farlo? La qualità / compressione è buona?

È stato utile?

Soluzione

Fai questo per convertire in sicurezza un PNG in JPG con la trasparenza in bianco.

$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);

Altri suggerimenti

Fai attenzione a ciò che vuoi convertire. JPG non supporta l'alfa-trasparenza mentre lo fa PNG. Perderai tali informazioni.

Per convertire, puoi usare la seguente funzione:

// 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);
}

Questa funzione utilizza imagecreatefrompng () e imagejpeg () funzioni dalla libreria GD.

Questo è un piccolo esempio che converte "image.png" in "image.jpg" con una qualità dell'immagine del 70%:

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

Spero che aiuti

<?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");
    }
}
    ?>

Questo è un ottimo script di miniature =) Ecco un esempio:

$ path = Il percorso della cartella in cui si trova l'immagine originale. $ name = Il nome file del file di cui vuoi creare un'anteprima. $ thumbpath = Il percorso della directory in cui desideri salvare la miniatura. $ maxwidth = la larghezza massima della miniatura in PX ad es. 100 (che sarà 100px).

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

Potresti voler esaminare Image Magick , generalmente considerato la libreria standard di fatto per l'elaborazione delle immagini. Richiede tuttavia un modulo php aggiuntivo da installare, non sono sicuro se ce ne siano / che sono disponibili in un'installazione predefinita.

HTH.

PHP ha alcune funzioni di elaborazione delle immagini insieme alle imagecreatefrompng e imagejpeg funzione . Il primo creerà una rappresentazione interna di un file di immagine PNG mentre il secondo viene utilizzato per salvare quella rappresentazione come file di immagine JPEG.

Vedi questo elenco di librerie di immagini php . Fondamentalmente è GD o Imagemagick.

So che non è una risposta esatta all'OP, ma poiché le risposte sono già state fornite ...

Hai davvero bisogno di farlo in PHP?
Quello che voglio dire è: se devi convertire molte immagini, farlo in PHP potrebbe non essere il modo migliore: ti troverai di fronte a memory_limit , max_execution_time , ...

Direi anche che GD potrebbe non offrirti il ??miglior rapporto qualità / dimensione; ma non ne sono sicuro (se fai un confronto tra GD e altre soluzioni, sono molto interessato ai risultati ;-))

Un altro approccio, non utilizzando PHP, sarebbe quello di utilizzare Image Magick tramite il riga di comando (e non come estensione PHP come suggerito da altre persone)

Dovresti scrivere uno shell-script che attraversi tutti i file .png e li dia a entrambi

  • convert per creare un nuovo .jpg per ciascun file .png
  • o mogrify per lavorare direttamente sull'originale file e sovrascriverlo.


Come sidenote: se lo stai facendo direttamente sul tuo server di produzione, potresti mettere un po 'di tempo di sonno tra un sacco di conversioni, per farlo raffreddare un po' a volte ^^


Ho usato lo script di shell + convert / mogrify alcune volte (facendoli funzionare per qualcosa come 10 ore una volta) , e loro fai davvero bene il lavoro :-)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top