Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculate how much bigger image A is from image B

Some math calculations in JS problem solving

I am working on a zoom image functionality that creates a new div with a large image that is moved through x and y according to the mousemove on the image.

The large image should move a certain %, which is what i am trying to figure out. How much should it move by.

Here is some info:

  • The small image is always the same size and its square. (it is actually always 221px X 221px)
  • The large image varies (also always square, can be any size like 1000x1000)
  • The view port of the zoomer is always the same.

I want to calculate how much smaller (or vice-versa ) the small image is from the the large.

This is in middle of a whole big script. I started writing the formula for the calculation: Again, All i want is to get the difference in percent converted into pixels step by step. First get the % then convert that into pixels.

    zoomObj.caluculateSizes = function(){
        $(zoomObj.largeImage).load(function(){
            // zoomObj.callingEvent is the small image
           zoomObj.smlImgSize = zoomObj.callingEvent.width()
           zoomObj.lrgImgSize = zoomObj.largeImage.width()

           // How do i go from here?
    })

js goes on.......

like image 930
adardesign Avatar asked Nov 05 '22 16:11

adardesign


1 Answers

This is just bit of simple math...

w - width of the small image
W - width of the big image
l - left position of the small image
L - left position of the big image

L = l + 1/2w - 1/2W

h - height of the small image
H - height of the big image
t - top position of the small image
T - top position of the big image

T = t + 1/2h - 1/2H

So assuming our image is:

<img style="width:221px; height:221px; position:absolute; left:600px; top:700px;" />

Answer:

Left = 600 + 1/2*221 - 1/2*1000 = 210 (rounded)
Top = 700 + 1/2*221 - 1/2*1000 = 310 (rounded)

<img style="width:1000px; height:1000px; position:absolute; left:210px; top:310px;" />

Using this calculation you can determine where you need to place big image/div to be centred in relation to the other object.


Edit: To put it all together, assuming bigImage is a CHILD of viewport, you need to use 0 as t and 0 as l.

Left = 0 + 1/2*221 - 1/2*1000 = -390 (rounded)
Top = 0 + 1/2*221 - 1/2*1000 = -390 (rounded)

<div id="viewport" style="width:221px; height:221px;overflow:hidden;position:relative;">
    <img id="bigImage" style="width:1000px; height:1000px; position:absolute; left:-390px; top:-390px;" />
</div>

- as you see I used negative values, so bigImage will hide behind the viewport, and because.

like image 176
rochal Avatar answered Nov 12 '22 10:11

rochal