Skip to main content
Known Participant
Mar 25, 2022 9:33 PM UTC
Answered

Auto-scale image to always fill composition when changing its position

Hello,

 

I've been searching everywhere for this and haven't found how to do this.

 

What I'm trying to do is to have a composition that is for example 4k (3840 x 2160)

and to have a still image that I insert into my composition that's sometimes larger than the composition and sometimes smaller than the composition and varies in sizes like portrait, landscape and square images, regardless, I just need to create an expression on the image Scale property that will automatically fill the whole composition regardless of where I move the image.

 

Say that I animate the image position from point A to point B, I want the image to maintain a constant scale that fills the entire composition throughout the whole animation for the image.

 

Please help.

 

Thanks.

This topic is closed to new replies. Start a new post to keep the conversation going.
Dan Ebberts
Dan EbbertsCorrect answer
Community Expert
Mar 26, 2022 5:02 PM UTC

Never mind the reply I just posted. This expression is exactly what I needed. Thank you Dan.

 

One more thing, what change can I make to the expression you suggested to have the image maintain the same scale?

 

If I animated the position of the image from point A to point B I suppose that a calculation needs to be made to get the scale of the image at the point that is further away from the center of the composition and keep that same scale throughout the whole animation.

 

I'm trying to figure out how to do that.


You could do something like this, but it will be slow if your comp is long. (You could always do Animation > Keyframe Assistant > Convert Expression to Keyframes once you're happy with the result.)

t = Math.max(inPoint,0);
maxS = 0;
while (t < thisComp.duration){
  p = position.valueAtTime(t);
  xScale = p[0] > thisComp.width/2 ? p[0]/(width/2) : (thisComp.width - p[0])/(width/2);
  yScale = p[1] > thisComp.height/2 ? p[1]/(height/2) : (thisComp.height - p[1])/(height/2);
  s = Math.max(xScale,yScale);
  maxS = Math.max(maxS,s);
  t += thisComp.frameDuration;
}
[maxS,maxS]*100

21 replies

Warren Heaton
Community Expert
Community Expert
Mar 26, 2022 12:08 AM UTC

Sounds like you want to increase the source footage size such that the width and height always exceed the Comp size.  So, use Dan Ebberts Scale expression set high enough above 100 such that the source image can pan and always filling the Comp.

Translate
Dan Ebberts
Community Expert
Community Expert
Mar 25, 2022 10:29 PM UTC

Something like this will stretch (or shrink) your image layer, non-uniformly, so that the image is the same size as the comp:

[thisComp.width/width,thisComp.height/height]*100

I'm not sure if that's what you're asking for though...

Translate
Joost van der Hoeven
Community Expert
Community Expert
Mar 26, 2022 1:28 PM UTC

This might help?

Translate
Known Participant
Mar 26, 2022 4:20 PM UTC

Thank you Joost. I did saw that video before posting my question here. The expressions from the video work well as long as you don't move your image.

Translate