This is an old question, so I am not answering for the sake of OP, but for those like me who later find this question.
Alphacomposite
As @Michael's excellent plan noted, AlphaComposite operation can modify the alpha channel. But only for certain reasons that I find difficult to understand:

formula for how the operation "over" affects the alpha channel. Moreover, it also affects the RGB channels, so if you have color data that should be unchanged, AlphaComposite is not the answer.
BufferedImageOps
LookupOp
There are several varieties of BufferedImageOp (see 4.10.6 here ). In a more general case, the OP task can be performed using LookupOp , which requires arrays of building objects. To change only the alpha channel, put an identification array (an array where the table is [i] = i) for RGB channels, and a separate array for the alpha channel. Fill in the last array table[i] = f(i) , where f() is the function with which you want to match the new value from the old alpha value. For example. if you want "every pixel in the image with an alpha value of 100 has an alpha value of 80," set table[100] = 80 . (The full range is from 0 to 255.) See how to increase the opacity in Gaussian blur for a code sample.
Rescaleop
But for a subset of these cases, there is an easier way to do this, which does not require tuning the lookup table. If f() is a simple, linear function, use RescaleOp . For example, if you want to set newAlpha = oldAlpha - 20 , use RescaleOp with scaleFactor 1 and an offset of -20. If you want to set newAlpha = oldAlpha * 0.8 , use scaleFactor 0.8 and an offset of 0. In any case, you will again have to provide dummy scale factors and offsets for the RGB channels:
new RescaleOp({1.0f, 1.0f, 1.0f, /* alpha scaleFactor */ 0.8f}, {0f, 0f, 0f, /* alpha offset */ -20f}, null)
Again see 4.10.6 here for some examples that illustrate the principles well, but are not specific to the alpha channel.
Both RescaleOp and LookupOp allow modification of the BufferedImage in place.