Exporting to JP2000 issues

A few thoughts to narrow it down.

Where did you download the S2 images?
It also makes a difference if you open them by the import function selecting the “MTD_MSIL2A.xml” file or if you directly open the jp2 files in the GRANULE folder.

the RGB viewer cuts off 5% of the data’s extreme values for visualization purposes to enhance the contrasts: Differences between image without and with 95% or 100% - #7 by marpet

The data’s actual value range might be considerably larger, especially when there are extremely white clouds in the image, but these values are neglected by SNAP so that the data has balanced contrasts.
Have a look a the color manipulation tab to see how the data would look without contrast enhancement. You must apply the stretch to all three bands of the RGB.

grafik
full (actual) value range:

grafik
95% clipped range:

If you need already stretched data, you can use Raster > Conversion > Convert Data type
There you can select JP2000 as an output format and apply a scaling, e.g. 95% clipped histogram

grafik

How writing stretched JP2 should work (didn’t fully test it, EDIT: @kraftek 's solution seems fine!)

  1. Import the full S2 product.
  2. Optic > Geometric > S2 Resampling Processor
  3. Uncheck “save as” so it is not physically written but just creates an intermediate product (see comments here), jmake sure you have 10m, press OK, Intermediate dataset 1 is created.
  4. Open the output, zoom to desired create a subset (either with Raster > Subset or right-click > “Spatial Subset From View”) select required bands in the Band Subset and click OK. Intermediate dataset 2 is created. Save it.
  5. Open the RGB to see if everything is alright.
  6. Export as JP2000. To handle the contrast stretching, use this instead: Raster > Conversion > Convert Data type. Use intermediate dataset 2 as input, select JP2 as output format, select suitable stretching, run.