Commit: 6f88053d852ad7f04b3d67b1905d88917f481ee3 Author: Philipp Oeser Date: Thu Jan 21 16:13:30 2021 +0100 Branches: blender-v2.92-release https://developer.blender.org/rB6f88053d852ad7f04b3d67b1905d88917f481ee3
Fix T84661: read jpg pixel density For jpeg, an image.resolution was always based on the default 72dpi, now read the pixel density from the jpeg_decompress_struct, convert according to unit and store in IMBuf's ppm. Not 100% sure of all implications tbh., files I have checked seem to work as expected now in the context of the report. Maniphest Tasks: T84661 Differential Revision: https://developer.blender.org/D10166 =================================================================== M source/blender/imbuf/intern/jpeg.c =================================================================== diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c index 7d4797def8f..440375f60dc 100644 --- a/source/blender/imbuf/intern/jpeg.c +++ b/source/blender/imbuf/intern/jpeg.c @@ -413,11 +413,22 @@ static ImBuf *ibJpegImageFromCinfo(struct jpeg_decompress_struct *cinfo, int fla jpeg_finish_decompress(cinfo); } - jpeg_destroy((j_common_ptr)cinfo); if (ibuf) { + /* Density_unit may be 0 for unknown, 1 for dots/inch, or 2 for dots/cm. */ + if (cinfo->density_unit == 1) { + /* Convert inches to meters. */ + ibuf->ppm[0] = cinfo->X_density / 0.0254f; + ibuf->ppm[1] = cinfo->Y_density / 0.0254f; + } + else if (cinfo->density_unit == 2) { + ibuf->ppm[0] = cinfo->X_density * 100.0f; + ibuf->ppm[1] = cinfo->Y_density * 100.0f; + } + ibuf->ftype = IMB_FTYPE_JPG; ibuf->foptions.quality = MIN2(ibuf_quality, 100); } + jpeg_destroy((j_common_ptr)cinfo); } return ibuf; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs