Je dois redimensionner un tas de grandes images et les rendre plus petits. Les originaux sont d'environ 2500 x 3800 et je dois les redimensionner jusqu'à environ 400x650 (je garde le rapport d'aspect exact, ce sont quelques-uns des nombres d'exemple bruts). P>
Je le fais actuellement avec PHP, Alors, comment puis-je redimensionner ces images et obtenir une meilleure qualité que ce qui précède la production? Y a-t-il une meilleure option dans PHP? Devrais-je utiliser un outil / une langue différente? P>
Une fois une question suggérée pour redimensionner plusieurs fois (par exemple, redimensionner d'abord à une taille moyenne, puis redimensionner cela à la petite version). Y a-t-il un mérite à cette approche? P>
La chose drôle est, j'affiche les mêmes images redimensionnées à une taille encore plus petite sur une page Web différente. Je les fais environ 10-20% plus petits avec HTML / CSS. Quand je le fais, le client est content de la qualité. Il apparaît donc qu'il y a un moyen d'augmenter la qualité de l'image si vous réduisez légèrement les dimensions de l'image dans le navigateur à la volée avec HTML / CSS. Devrais-je utiliser cette approche? Ça ne sonne pas comme une bonne idée. P> Imagecopyresamped () code>,
imagejpeg () code> et
imagepng () code>. Lorsque je les redimensionnez de cette façon, le client n'est pas satisfait de la qualité d'image résultante - ils sont légèrement flous. J'utilise l'option de la plus haute qualité pour les deux
imagejpeg () code> et
imagepng () code> (c.-à-d. 100 et 0 respectivement). P>
3 Réponses :
Vous ne montrez pas votre code, donc personne ne peut vous aider beaucoup. Mais juste un indice. Peut-être peut-être être causé par le moniteur étant la rétine. P>
Ceci est principalement dû à la haute résolution sur les écrans de la rétine.
Les pixels CSS sont une unité abstraite utilisée par les navigateurs. Les pixels CSS sont des pixels indépendants de l'appareil. Ils se réajustent à la densité de pixels de l'écran qu'ils sont rendus. P>
Si nous avons le code suivant: p> Le composant ci-dessus semblerait 250px de 400px de taille dans un affichage standard tandis que 500PX de 800px d'une rétine. P> Vous avez deux options dans ce cas
1. Vous pouvez toujours utiliser une image de taille 2x et afficher 50% en utilisant CSS Styling ou réglage de la largeur et de la hauteur IMG.
2. Code par exemple pour la deuxième option p> espère que cela aide. p> p>
Pour une descente correcte, d'une manière qui réduit l'aliasing, une image doit être limitée de bande par filtrage LowPass (c'est-à-dire floue!). P>
La fonction Vous allez penser que je suis fou parce que les images sont trop floues, mais mon pari est que ce que votre client appelle flou em> est en fait aliased em>. p> ImageCopyResamplé code> n'apparaît pas exécuter un tel flou (elle fait plutôt une interpolation, ce qui n'est approprié que pour le rechantillonnage). Vous pouvez obtenir l'effet flou en utilisant la fonction
ImageConVolution code>, avec tous les coefficients égaux à
1 code> et appliquer deux ou trois passes. Ensuite, alors vous pouvez utiliser
Imagecopyresamplé code>. P>
Meilleure réponse jusqu'à présent. Utilisez une méthode dans laquelle vous pouvez utiliser Lanczos comme filtre, c'est-à-dire à Thru Imagick: PHP .NET / manuel / de / imagick.resizeImage.php # 94493
PNG n'a pas de paramètre de qualité. C'est une compression sans perte, toutes les valeurs de ses paramètres de compression donnent exactement la même image lorsque vous lisez. Les balans de paramètres Temps de compression Timètre de compression VS Taille du fichier.
S'il vous plaît ne réinventez pas la roue. Il y a beaucoup de bibliothèques cool qui font cette tâche pour vous. Vous devez les utiliser.
Vérifiez cette bibliothèque cool, github.com/gumlet/php-image-résiser , il fonctionne exactement comme vous voulez