Imagick PNG compression en PHP
J'ai été à récurer stackoverflow ainsi que PHP /Imagick de la documentation afin d'obtenir que cela fonctionne. J'ai des images PNG stockés sur mon serveur, qui sont ensuite retournées à mon application iOS. J'ai besoin de retourner en tant que redimensionnée et des images recadrées, donc je suis en utilisant Imagick. Donc, pour l'instant j'ai:
$image_name = $_POST['filepath'];
if(!file_exists($image_name)){ return ""; }
header("Content-Type: image/png");
$image = new Imagick($image_name);
$image->resizeImage($_POST['width'], $_POST['height'], Imagick::FILTER_LANCZOS, 1);
$image->roundCorners($_POST['width'], $_POST['height']);
$image->setImageFormat("png");
$image->setImageCompression(\Imagick::COMPRESSION_UNDEFINED);
$image->setImageCompressionQuality(0);
$image->stripImage();
echo $image;
Pour setImageCompression, j'ai essayé tous seule de compression constante répertoriés ici: http://php.net/manual/en/imagick.constants.php, comme il n'est pas spécifique pour les Png, mais aucun d'entre eux semblent modifier la taille du fichier. (Est-il un en particulier doit être utilisé pour des Png?) J'ai aussi changé la valeur dans setImagesCompressionQuality autour, mais aucun de ces changements ne semble faire aucune différence non plus. J'ai vu que certaines personnes n'ont jamais été en mesure d'obtenir Imagick de travail, tandis que d'autres ont été, et a été l'espoir pour plus de mises à jour de réponse. Toute aide appréciée!
- Est-ce aider: imagemagick.org/discourse-server/viewtopic.php?t=24134
- J'ai déjà essayé à l'aide de diverses qualités de compression - ne semble pas modifier la taille du fichier à tous les
Vous devez vous connecter pour publier un commentaire.
C'est la fonction
setImageCompressionQuality
pour définir le niveau de compression qui est fait pour les images PNG. Comme le PNG est un format d'image sans perte, cela n'affecte pas l'image réelle de la qualité (comme c'est le cas pour les images JPEG), mais indique simplement à la bibliothèque de la façon dont beaucoup d'efforts, et la stratégie à utiliser lors de la compression d'images. Le code ci-dessous fonctionne à travers toutes les options possibles.J'ai aussi essayé pngcrush avec la ligne de commande:
pngcrush -brute Original.png pngcrushBrute.png
de voir comment beaucoup plus d'espace pourrait être sauvé.pngcrushBrute.png: 178,129 octets - ce qui est probablement plus dû à la suppression des en-têtes supplémentaires que beaucoup mieux à la compression.
$imagick->setImageFormat('jpg');
$imagick->setImageCompressionQuality(80);
Original.jpg: 27,626 octets \o/
Pour résumer:
Le code utilisé: