PHP Téléchargement d'une Grande image et le redimensionnement avec la proportion comme Photoshop
Un rapide brief. Nous avons actuellement de faire de petites, moyennes et grandes images basée sur les images de produits, nous avons sur notre site. N'étant pas un crack de sur PHP j'ai pensé que je pourrais toujours essayer d'automatiser ce cauchemar.
L'image que nous avons de la télécharger et de la dimension de la base est en dessous de
800 width x 1400 width LARGE
300 width x 525 width THUMB
Le problème avec mon script PHP est qu'il vient de se redimensionne avec mise à l'échelle de proportion. Je veux être en mesure à l'échelle vers le bas comme dans Photoshop, vous cliquez simplement sur la touche maj et l'image échelles. Je suis en train d'utiliser imagecopyresized
mais avec un peu de chance.
<?php
//PHP UPLOAD SCRIPT
//VALIDATION OF FORM
if($_FILES['user_image']['type'] == "image/jpeg" && $_FILES['user_image']['size'] < 3000000)
{
//VARS
$target_folder = 'images/';
$upload_image = $target_folder.basename($_FILES['user_image']['name']);
//UPLOAD FUNCTION
if(move_uploaded_file($_FILES['user_image']['tmp_name'], $upload_image))
{
//VARS FOR FILE NAMES
$thumbnail = $target_folder."medium_x.jpg";
$actual = $target_folder."large_x.jpg";
//THUMBNAIL SIZE
list($width, $height) = getimagesize($upload_image);
$newwidth = "300";
$newheight = "525";
//VARS FOR CALL BACK
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($upload_image);
//RESIZE WITH PROPORTION LIKE PHOTOSHOP HOLDING SHIFT
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//MAKE NEW FILES
imagejpeg($thumb, $thumbnail, 100);
//FILE RENAMES
rename($upload_image, $actual);
{
//SUCCESS MESSAGES
?>
<p>
Image Successfully uploaded!<br />
Actual image: <?=$actual;?><br />
Thumbnail image: <?=$thumbnail;?><br />
<h1>Large</h1>
<img src="<?=$actual;?>"/><br /><br />
<h1>Medium</h1>
<img src="<?=$thumbnail;?>"/><br /><br />
</p>
<?
}
//FAILED MESSAGES
}
else
{
echo 'Upload failed.';
}
}
else
{
//NOT A JPEG
echo 'Not a JPEG';
}
//END OF SCRIPT
?>
Comment puis-je redimensionner correctement sans avoir une image redimensionnée? Est-il possible?
OriginalL'auteur TheBlackBenzKid | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple d'atteindre cet objectif sans seaux de code PHP avec Image Magick. Voir les exemples et exemples de ligne de commande ici: http://www.imagemagick.org/Usage/resize/#fill
(pouvez appeler à partir de PHP en utilisant exec() ou similaire)
Edit: mise en Œuvre comme suit:
Vous pourriez optimiser la façon dont vous gérer le télécharger mais je n'ai pas trop envie de changer totalement la structure de votre code car je ne sais pas ce qui l'entoure. Mais, fondamentalement, vous poussez l'image d'ImageMagick
convert
, et il va fonctionner c'est de la magie.Si vous voulez des cultures ainsi que l'échelle, la commande exec serait:
exec('convert '.$upload_image.' -resize '.$newwidth.'x'.$newheight.'^ -gravity center -extent '.$newwidth.'x'.$newheight.' '.$thumbnail);
imagecopyresized
de commande avec les références dans le lien ci-dessus?Je vais modifier ma réponse pour vous montrer la mise en œuvre
Pas besoin d'exécuter une ligne de commande pour utiliser cela. Imagick est déjà enveloppé dans une belle bibliothèque php
Ligne de commande est plus rapide et mieux documenté. Je ne vois pas l'intérêt d'en ajouter le PHP de gestion lors d'une simple exec() peut faire tout le travail?
L'amour de cette option très simple, sans encombrer mon code PHP. Merci!
OriginalL'auteur LuckySpoon
Regardez cet extrait de code. Est-ce que vous besoin. Essentiellement utilisé pour maintenir le ratio lors de la création de la manette.
http://snipplr.com/view/753/
OriginalL'auteur priyolahiri