Frage

Ich habe eine Reihe von hohen Qualität PNG-Dateien. Ich möchte PHP verwenden, um sie zu JPG, weil es kleinere Dateigrößen ist bei gleichbleibender Qualität. Ich mag die JPG-Dateien im Web angezeigt werden soll.

Hat PHP-Funktionen / Bibliotheken, dies zu tun? Ist die Qualität / Komprimierung gut?

War es hilfreich?

Lösung

Tun Sie dies mit der Transparenz in weiß sicher ein PNG zu JPG konvertieren.

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

Andere Tipps

Seien Sie vorsichtig, was Sie konvertieren möchten. JPG nicht Alpha-Transparenz während PNG unterstützt. Sie werden diese Informationen verlieren.

zu konvertieren, können Sie die folgende Funktion verwenden:

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

Diese Funktion verwendet die imagecreatefrompng() und der imagejpeg() Funktionen aus der GD-Bibliothek.

Dies ist ein kleines Beispiel, das ‚image.png‘ auf ‚image.jpg‘ bei 70% Bildqualität konvertiert:

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

Ich hoffe, das hilft

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

Dies ist ein sehr gutes Thumbnail-script =) Hier ein Beispiel:

$ path = Der Pfad zum Ordner, in dem das Originalbild ist. $ Name = Der Dateiname der Datei, die Sie eine Miniaturansicht machen wollen. $ = Thumbpath Der Pfad zum Verzeichnis, in dem Sie das Miniaturbild wollen in gespeichert werden. $ Maxwidth = die maximale Breite der Miniaturansicht im PX zB. 100 (Wich wird 100px sein).

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

Vielleicht möchten Sie schauen in Image Magick , in der Regel in Betracht gezogen die de-facto-Standard-Bibliothek für die Bildverarbeitung. Erfordert ein zusätzliches PHP-Modul obwohl installiert wird, nicht sicher, ob irgendwelcher / die in einer Standard-Installation verfügbar sind.

HTH.

PHP hat einige Bildverarbeitungsfunktionen zusammen mit der imagecreatefrompng und

Siehe diese Liste von PHP-Bildbibliotheken . Im Grunde ist es GD oder ImageMagick.

Ich weiß, es ist keine exakte Antwort auf die OP, aber als Antworten haben bereits gegeben ...

Haben Sie wirklich brauchen dies in PHP zu tun?
Was ich meine, ist: Wenn Sie viele Bilder konvertieren müssen, ist es in PHP zu tun ist vielleicht nicht der beste Weg sein: Sie konfrontiert werden, um memory_limit, max_execution_time, ...

Ich würde auch sagen könnte GD Ihnen das beste Qualität / Größenverhältnis nicht erhalten; aber nicht sicher, dass (wenn Sie einen Vergleich zwischen GD und anderen Lösungen zu tun, ich bin sehr daran interessiert, die Ergebnisse ;-))

Ein weiterer Ansatz, nicht mit PHP, wäre zu verwenden Image Magick über die Befehlszeile (und nicht als PHP-Erweiterung wie andere Leute vorgeschlagen)

Sie müßten einen Shell-Skript schreiben, das durch alle .png Dateien geht, und gibt sie entweder

  • convert eine neue .jpg-Datei für jede .png-Datei erstellen
  • oder mogrify arbeiten direkt auf die Originaldatei und überschreibt es.


Als Nebenbemerkung: Wenn Sie diese direkt auf dem Produktionsserver tun, könnten Sie etwas Schlaf Zeit zwischen Bündel von Umwandlungen setzen, es zu lassen, manchmal ein wenig abkühlen ^^


Ich habe den Shell-Skript verwenden + convert / mogrify ein paar Mal (mit ihnen für so etwas wie 10 Stunden einmal ausgeführt) , und sie tun den Job wirklich gut: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top