-1
votes

Comment réduire la grande image et retenir la qualité?

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).

Je le fais actuellement avec PHP, Imagecopyresamped () , imagejpeg () et imagepng () . 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 () et imagepng () (c.-à-d. 100 et 0 respectivement).

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?

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?

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.


3 commentaires

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


3 Réponses :


1
votes

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.


0 commentaires

0
votes

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.

Si nous avons le code suivant: xxx

Le composant ci-dessus semblerait 250px de 400px de taille dans un affichage standard tandis que 500PX de 800px d'une rétine.

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. La meilleure approche Supposons que vous souhaitiez afficher une image de 250px par 400px, disposez d'une autre image de taille 500px de 800px sur le serveur et de les rendre chaque fois que la page Web est servie à une affichage de la rétine.

Code par exemple pour la deuxième option xxx

espère que cela aide.


0 commentaires

1
votes

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!).

La fonction ImageCopyResamplé 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 , avec tous les coefficients égaux à 1 et appliquer deux ou trois passes. Ensuite, alors vous pouvez utiliser Imagecopyresamplé .


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 est en fait aliased .


1 commentaires

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