Comment centrer un point d'une image à l'intérieur d'un canevas ?

Mulgard

J'ai une image que je montre sur une toile. Le premier défi pour moi était de redimensionner l'image afin qu'elle corresponde toujours à la div parent. J'y suis parvenu en faisant ceci :

const horizontalRatio = ctx.canvas.width / image.width;
const verticalRatio = ctx.canvas.height / image.height;
const ratio = Math.min(horizontalRatio, verticalRatio);
const centerShiftX = (ctx.canvas.width - image.width * ratio) / 2;
const centerShiftY = (ctx.canvas.height - image.height * ratio) / 2;
const scaledImageWidth = image.width * ratio;
const scaledImageHeight = image.height * ratio;

ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.drawImage(
  image,
  0,
  0,
  image.width,
  image.height,
  centerShiftX,
  centerShiftY,
  scaledImageWidth,
  scaledImageHeight,
);

Quelle que soit la hauteur ou la largeur de mon div parent, l'image s'affichera toujours en conservant complètement son rapport hauteur/largeur d'origine. Ce que je n'ai pas encore réussi à faire, c'est de centrer la vue sur un certain point de l'image.

Dans le monde réel, j'ai un formulaire avec des champs de saisie. J'ai aussi une image du formulaire (son scanné) et je connais les coordonnées de chaque champ de saisie sur l'image originale. Ainsi, lorsque je suis dans un champ de texte, je souhaite centrer les coordonnées de ce champ de saisie sur l'image. Lorsqu'aucun champ de saisie n'est ciblé, je souhaite afficher l'image telle qu'elle apparaît maintenant avec le code ci-dessus.

Code:

JS Bin

Visualisation

entrez la description de l'image ici

  1. Image originale
  2. La zone que je veux centrer
  3. La nouvelle image avec la zone centrée
Mulgard

Je l'ai résolu. C'était beaucoup plus facile que je ne le pensais. Disons que nous avons des coordonnées :

leftUpper.x
leftUpper.y
rightLower.x
rightLower.y

Ensuite, nous pouvons effectuer les opérations suivantes :

coordsCenterX = (coords.rightLower.x - coordsleftUpper.x) / 2;
coordsCenterY = (coords.rightLower.y - coordsLeftUpper.y) / 2;
coordsX = (coords.leftUpper.x + coordsCenterX) * ratio;
coordsY = (coords.leftUpper.y + coordsCenterY) * ratio;

centerShiftX += scaledImageWidth / 2 - coordsX;
centerShiftY += scaledImageHeight / 2 - coordsY;

Donc, fondamentalement, nous plaçons le coin supérieur gauche de l'image au centre de la toile et après cela, soustrayons le centre du rectangle que nous voulons voir au centre de la toile.

Corbeille JS mise à jour

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment centrer une image à l'intérieur d'un div?

Comment centrer une table à l'intérieur d'un div?

Comment centrer verticalement une image à l'intérieur d'un SPAN

Comment puis-je centrer une image verticalement à l'intérieur d'un div dans bootstrap?

Comment centrer verticalement img à l'intérieur d'une étendue à l'intérieur d'un div?

Comment centrer l'icône de liste pour une image à l'intérieur d'un élément li

Ajuster l'image à l'intérieur d'un canevas

Comment trouver un point à l'intérieur d'une ellipse?

Centrer une image d'arrière-plan à l'intérieur d'un div

Créer une image dans un canevas à l'intérieur d'une classe

Comment puis-je animer une image d'un point à un autre par programmation à l'aide d'un canevas WPF?

Comment centrer une image à l'intérieur d'un UIButton sans s'étirer dans les deux sens dans Swift?

Comment centrer un div à l'intérieur d'une image? (en utilisant flex mais pas background-img)

Comment centrer l'image à l'intérieur d'un div, en utilisant CSS ?

Centrer verticalement un carrousel à l'intérieur d'une section

Centrer un widget à l'intérieur d'une colonne

Centrer un div à l'intérieur d'une grille CSS

Comment centrer du texte à l'intérieur d'un composant?

Comment centrer un texte à l'intérieur d'une chaîne par rapport à tout l'écran ?

Centrer et rogner une image à l'intérieur d'un div

comment redimensionner une image à l'intérieur d'un bouton

Comment centrer aligner une ICÔNE à l'intérieur d'un BOUTON dans Materialise css navbar?

comment centrer une travée verticale à l'intérieur d'un bouton avec bootstrap 4

Comment centrer une étiquette à l'intérieur d'un panneau sans configurer Dock pour remplir

Comment centrer une hitbox à l'intérieur d'un sprite triangulaire rotatif ?

Comment centrer une étiquette à l'intérieur d'un nœud dans Godot?

Comment centrer un bouton d'une image

Centrer une image verticalement à l'intérieur d'une balise d'ancrage dans un élément flexible

Comment centrer un élément de liste à l'intérieur d'une liste horizontale non ordonnée ?

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive