Comment "redimensionner intelligemment" une image affichée au format d'origine
J'ai une application dans laquelle les utilisateurs finaux peuvent taille et la position des images dans un concepteur. Depuis la spécification des appels pour que l'image soit "étiré" pour le contenant de contrôle, l'utilisateur final peut se retrouver avec un maladroitement image redimensionnée.
Pour aider l'utilisateur avec la taille de l'image je pense à la mise en œuvre d'une smart resizer fonction qui permettrait à l'utilisateur de facilement fixer le ratio d'aspect de l'image de sorte qu'elle n'apparaît plus tendu.
Le moyen rapide de résoudre ce problème est de prévoir deux options: 1) l'échelle de largeur 2) de l'échelle de hauteur. L'utilisateur choisit la méthode et l'algorithme ajuste la taille de l'image en utilisant le ratio d'aspect original. Par exemple: Une photo est affichée en tant que 200x200 sur le concepteur, mais l'image d'origine est de 1024x768 pixels. L'utilisateur choisit l'option "Smart Taille de la largeur" et la nouvelle taille devient ~200x150 puisque le ratio d'aspect original est ~1.333
C'est OK, mais comment pourrais-je rendre l'algorithme plus intelligent et pas la peine de l'utilisateur en demandant à la dimension du nouveau calcul doit être basé sur?
source d'informationauteur Paul Sasik
Vous devez vous connecter pour publier un commentaire.
Si je suis l'interprète de vos spec correctement, vous voulez un résultat qui n'est pas plus grand que celui de l'utilisateur final prévu à l'origine; vous voulez que l'un des deux dimensions à se rétrécir, et de l'autre de rester le même. En d'autres termes, la nouvelle taille doit remplir le concepteur de l'espace dans une direction alors que le raccourcissement de la taille dans l'autre sens pour conserver les proportions d'origine.
Souvent, vous pourrez travailler avec des entiers coordonnées, mais les divisions de produire les ratios ci-dessus doivent être en virgule flottante. Voici un réarrangement de la formule pour être plus entier sympathique. Assurez-vous que votre entiers ont la gamme de gérer le maximum de la largeur*hauteur.
Voici une solution je suis venu avec quand avoir à faire face à ce problème. S'est avéré assez court et simple de l'omi, je voulais juste le partager.
À portée de main "formules":
ratio = W /H
→W = H * ratio
→H = W /ratio
En Javascript
originalSize
etnewSize
est un tableau[0] = width
[1] = height
Il n'y a pas de comptabilité pour le montant de la copie et de dérouleurs là hein!!! Je voulais aussi savoir ce que je voyais étaient infinies des exemples de mise à l'échelle de la largeur OU de la hauteur.. qui voudrait que les autres déborder?!
//////////////
A pris la suggestion ci-dessus et mis à l'échelle vers le haut/vers le bas à l'intérieur de max hauteur /largeur. Voici le code python pour elle et également ajouté le support pour la rotation des choses tout en gardant à l'intérieur de limites:
def _resize(image, les dimensions, rotate=None):
"""
Redimensionne une image aussi proche que possible aux dimensions indiquées. L'Image est un
django image-modèle-champ.
Parce que vous voulez maximiser montrant autant que possible à l'échelle de l'image (de l'original) dans votre fenêtre, c'est à dire la zone de votre concepteur, vous devez prendre le plus grand de la largeur ou la hauteur de l'image d'origine, et à une échelle de 200. Pseudo-code (largeur, hauteur, sont des dimensions de l'original):
Calculer les nouvelles dimensions pour les deux variantes ("échelle par la largeur" et "l'échelle en hauteur"), puis utilisez l'une qui s'adapte à l'écran.
Sinon vous pouvez aussi calculer le ratio d'aspect de la "zone de délimitation" et la comparaison avec le ratio d'aspect de l'image d'origine. Selon le rapport d'aspect est plus grand, la hauteur ou la largeur doit être mis à l'échelle.
Vous pouvez aussi restreindre le processus de redimensionnement, de sorte que dans tous les cas, "l'échelle de largeur" est fait. Ensuite, pour modifier la taille de l'image, l'utilisateur dispose toujours de changer sa largeur. La hauteur sera toujours réglée automatiquement.
Vous avez juste besoin de travailler à l'échelle nécessaire pour les deux dimensions, puis prenez la plus petite des 2.
voici ma solution,
a = aspect
sw = largeur de l'image d'origine
sh = hauteur de l'image d'origine
dw = a demandé largeur max
dh = a demandé hauteur max
sw et le poisson contiennent de la finale redimensionnée valeurs
code PHP:
J'ai utilisé ce moyen pour redimensionner l'image pour FHD façon
vous pouvez modifier le 1080 à la nouvelle taille.
J'espère que c'est utile pour quelqu'un qui au moins.
Ma solution pour réduire et agrandir la taille en javascript basé sur https://stackoverflow.com/a/5654847/1055015