Je souhaite écrire du code PHP qui redimensionne automatiquement toute image téléchargée via un formulaire à 147x147px, mais je n'ai aucune idée de la façon de procéder (je suis un novice en PHP).
Jusqu'à présent, j'ai des images téléchargées avec succès, les types de fichiers étant reconnus et les noms nettoyés, mais j'aimerais ajouter la fonctionnalité de redimensionnement dans le code. Par exemple, j'ai une image de test de 2,3 Mo et de 1331x1331 en dimension, et j'aimerais que le code la redimensionne, ce qui, je suppose, compressera considérablement la taille du fichier de l'image.
Jusqu'à présent, j'ai ce qui suit:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n);
} else {
$bad_message = "Please ensure your chosen file is less than 5MB.";
}
} else {
$bad_message = "Please ensure your image is of filetype .jpg or.png.";
}
}
$query = "INSERT INTO users (image) VALUES ('$n')";
mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
php
image-processing
image-resizing
image-upload
Alex Ryans
la source
la source
upload_max_filesize
enphp.ini
est tout d' abord possible de télécharger le fichier de taille plusupload_max_filesize
?. Y a-t-il une chance de redimensionner l'image de taille plus queupload_max_filesize
? sans changerupload_max_filesize
enphp.ini
Réponses:
Vous devez utiliser les fonctions ImageMagick ou GD de PHP pour travailler avec des images.
Avec GD, par exemple, c'est aussi simple que ...
Et vous pouvez appeler cette fonction, comme ça ...
D'après l'expérience personnelle, le rééchantillonnage d'image de GD réduit également considérablement la taille du fichier, en particulier lors du rééchantillonnage d'images brutes d'un appareil photo numérique.
la source
BLOB
s? Je recommanderais de stocker des images dans le système de fichiers et d'insérer des références dans votre base de données. Je recommande également de lire la documentation complète de GD (ou ImageMagick) pour voir les autres options disponibles.abs()
, commeceil($width-($width*abs($r-$w/$h)))
et même à la partie de hauteur. Il est nécessaire dans certains cas.imagejpeg($dst, $file);
après laimagecopyresampled($dst,...
ligne. Modifiez$file
si vous ne souhaitez pas écraser l'original.Cette ressource(lien rompu) vaut également la peine d'être prise en compte - un code très soigné qui utilise GD. Cependant, j'ai modifié leur extrait de code final pour créer cette fonction qui répond aux exigences des OP ...Vous devrez également inclure ce fichier PHP ...
la source
Fonction PHP simple d'utilisation ( échelle d'images ):
Syntaxe:
Exemple:
Étape: 1 Lisez le fichier
Étape: 2: chargez le fichier image
Étape: 3: Notre Life-sauver arrive en «_» | Mettre l'image à l'échelle
Remarque: imagecale fonctionnera pour (PHP 5> = 5.5.0, PHP 7)
Source: Cliquez pour en savoir plus
la source
Si vous ne vous souciez pas du rapport d'aspect (c'est-à-dire que vous voulez forcer l'image à une dimension particulière), voici une réponse simplifiée
Gérons maintenant la partie téléchargement. Première étape, téléchargez le fichier dans le répertoire souhaité. Ensuite, appelez l'une des fonctions ci-dessus en fonction du type de fichier (jpg, png ou gif) et transmettez le chemin absolu de votre fichier téléchargé comme ci-dessous:
La valeur de retour
$img
est un objet de ressource. Nous pouvons enregistrer dans un nouvel emplacement ou remplacer l'original comme ci-dessous:J'espère que cela aide quelqu'un. Consultez ces liens pour en savoir plus sur le redimensionnement d' Imagick :: resizeImage et imagejpeg ()
la source
upload_max_filesize
enphp.ini
, d'une part , vous ne pouvez pas télécharger le fichier de taille plusupload_max_filesize
. Y a-t-il une chance de redimensionner l'image de taille plus queupload_max_filesize
sans changerupload_max_filesize
enphp.ini
J'espère que cela fonctionnera pour vous.
la source
( IMPORTANT : dans le cas d'un redimensionnement d'animation (webp ou gif animé), le résultat sera une image non animée, mais redimensionnée à partir de la première image! (L'animation d'origine reste intacte ...)
J'ai créé ceci dans mon projet php 7.2 (exemple imagebmp sure (PHP 7> = 7.2.0): php / manual / function.imagebmp ) à propos de techfry.com/php-tutorial , avec GD2, (donc rien de bibliothèque tierce) et très similaire à la réponse de Nico Bistolfi, mais fonctionne avec les cinq types d'images de base ( png, jpeg, webp, bmp et gif ), créant un nouveau fichier redimensionné, sans modifier l'original, et le tout dans une seule fonction et prêt à l'emploi (copiez et collez dans votre projet). (Vous pouvez définir l'extension du nouveau fichier avec le cinquième paramètre, ou simplement le laisser, si vous souhaitez conserver le signal d'origine):
la source
.cr2, .dng, .nef
et les likes)? GD2 n'a aucun support et après beaucoup de difficultés, j'ai pu configurer ImageMagick. Mais, il échoue avec une erreur de délai de connexion lors de la lecture du fichier. Et, pas de journal des erreurs non plus ..J'ai créé une bibliothèque facile à utiliser pour le redimensionnement d'image. Il peut être trouvé ici sur Github .
Un exemple d'utilisation de la bibliothèque:
D'autres fonctionnalités, si vous en avez besoin, sont:
la source
Voici une version étendue de la réponse donnée par @Ian Atkin '. J'ai trouvé que cela fonctionnait extrêmement bien. Pour des images plus grandes, c'est :). Vous pouvez en fait agrandir des images plus petites si vous ne faites pas attention. Modifications: - Prend en charge les fichiers jpg, jpeg, png, gif, bmp - Préserve la transparence pour .png et .gif - Vérifie deux fois si la taille de l'original n'est pas déjà plus petite - Remplace l'image donnée directement (c'est ce dont j'avais besoin)
Alors voilà. Les valeurs par défaut de la fonction sont la "règle d'or"
la source
$w === $width && $h === $height
. Pensez-y. Devrait être>=
et des>=
comparaisons. @DanielGâteau ZF:
la source
J'ai trouvé un moyen mathématique de faire ce travail
Repo Github - https://github.com/gayanSandamal/easy-php-image-resizer
Exemple en direct - https://plugins.nayague.com/easy-php-image-resizer/
la source
Vous pouvez essayer la bibliothèque PHP TinyPNG. En utilisant cette bibliothèque, votre image est optimisée automatiquement pendant le processus de redimensionnement. Tout ce dont vous avez besoin pour installer la bibliothèque et obtenir une clé API de https://tinypng.com/developers . Pour installer une bibliothèque, exécutez la commande ci-dessous.
Après cela, votre code est le suivant.
J'ai écrit un blog sur le même sujet http://artisansweb.net/resize-image-php-using-tinypng
la source
Je suggérerais un moyen simple:
la source
}
C'est une solution adaptée basée sur cette grande explication. Ce type a fait une explication étape par étape. J'espère que tout le monde l'appréciera.
la source