I don’t think you can currently modify the opacity of an image
A workaround I have used though is overlaying it with a filled box (this works both for “decreasing the opacity” - i.e. overlaying a semi-transparent white box - and for “mixing a color” - i.e. a semi-transparent box fill with another color)
If the image is larger than the container it is placed in, it is resized automatically to fit. However, this is by default not reflected in the measured size, as measuring happens on an unbounded canvas. I would recommend using the layout function and passing the bounds in measure.
By using place, you can simplify this quite a bit, as you can set the alignment to the top left of the parent block (here the layout element), so that you don’t need to move the box manually.
When looking for similar functionality i came accross this question and later on a package that seems to do what you were looking for.
Transparancy is not supported by Typst directly, but the package grayness supports parsing of images and performing operations on the image.
One of the operations is transparent image.