Comment faire pour compresser les images dans CodeIgniter, mais ne pas changer leurs dimensions?
J'ai un site où les utilisateurs peuvent télécharger des images. - Je traiter ces images directement et de les redimensionner en 5 formats supplémentaires à l'aide de la CodeIgniter de Manipulation de l'Image de la classe. Je le fais assez efficacement comme suit:
- J'ai toujours redimensionner par rapport au modèle précédent, au lieu de partir de l'original
- Je redimensionner à l'aide d'une image de qualité de 90% sur les moitiés de la taille du fichier de jpeg
Au-dessus de la façon de faire les choses j'ai mis en place après le conseiller que j'ai obtenu à partir d'une autre question que j'avais posée. Mon cas de test est un 1.6 MO JPEG en mode RVB avec une haute résolution de 3872 x 2592. Pour cette image, qui est une sorte de cas limite, le processus de redimensionnement en totale prend environ 2 secondes, ce qui est acceptable pour moi.
Maintenant, un seul défi demeure. Je veux que le fichier d'origine pour être compressé à l'aide que 90% de la qualité mais sans redimensionnement. L'idée étant que ce fichier permettra aussi de prendre la moitié de la taille du fichier. J'ai pensé que je pouvais tout simplement redimensionner à ses dimensions actuelles, mais qui ne semble pas faire quelque chose pour le fichier ou sa taille. Voici mon code, quelque peu simplifiée:
$sourceimage = "test.jpg";
$resize_settings['image_library'] = 'gd2';
$resize_settings['source_image'] = $sourceimage;
$resize_settings['maintain_ratio'] = false;
$resize_settings['quality'] = '90%';
$this->load->library('image_lib', $resize_settings);
$resize_settings['width'] = $imagefile['width'];
$resize_settings['height'] = $imagefile['height'];
$resize_settings['new_image'] = $filename;
$this->image_lib->initialize($resize_settings);
$this->image_lib->resize();
Le code ci-dessus fonctionne très bien pour tous les formats à l'exception de l'original. J'ai essayé de débogage dans la CI de la classe pour voir pourquoi il ne se passe rien et j'ai remarqué que le script détecte que les dimensions ne changent pas. Ensuite, il a simplement fait une copie de ce fichier sans traitement à tous. J'ai commenté ce morceau de code pour le forcer à les redimensionner mais maintenant, toujours rien ne se passe.
Quelqu'un sait comment compresser une image (une image, et pas seulement des fichiers jpeg) à 90% à l'aide de l'IC de classe sans changer les dimensions?
OriginalL'auteur Ferdy | 2010-01-01
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous pourriez faire quelque chose comme ceci:
Et puis définissez les options suivantes comme ceci:
Ok, donc qui ne fonctionne pas à cause d'IC d'essayer d'être intelligent, la façon dont je le vois, vous avez trois options possibles:
L'approche de DIY est vraiment simple, je sais que vous ne voulez pas utiliser de "personnalisé" fonctions mais prendre un coup d'oeil:
Comme vous pouvez le voir, c'est même plus simple que d'utiliser l'IC.
PS: L'extrait de code ci-dessus peut ouvrir n'importe quel type d'image (GIF, PNG et JPEG) et il enregistre toujours l'image comme JPEG avec 90% de la qualité, je crois que c'est ce que vous essayez d'archive.
Oh, je suis désolé. Je n'ai pas lu votre question jusqu'à la fin. Vérifier mon montage en quelques minutes.
Pas de problème, je vous remercie de votre aide à nouveau. Bon, j'ai fait quelques tests. La rotation n'est pas pris en charge par GD2, au moins c'est ce que CI donne à l'arrière comme une erreur. Je peux faire tourner le passage à imagemagick, mais qui augmente la taille du fichier au lieu de la diminuer. Je peux voir comment votre code devrait être facile à utiliser et je n'ai aucun problème en sortant de la CI de la classe, mais j'ai besoin de quelque chose qui fonctionne avec les formats GIF et PNG.
Mon extrait de code fonctionne pour le GIF, le PNG et le JPEG les images, essayez-le! Tout ce que vous devez faire est de changer les extensions de fichier. BTW, CI bibliothèque d'image est vraiment mauvaise, la rotation d'une image est prise en charge par GD (inclus), cochez php.net/manual/en/function.imagerotate.php.
Vous ne pouvez pas compresser les images GIF et PNG images doivent toujours être compressé vers le niveau le plus élevé (9).
OriginalL'auteur Alix Axel