From 9339542bcefa4c38ffe121730554ae10bbca4d07 Mon Sep 17 00:00:00 2001 From: songjiayang Date: Mon, 22 Jan 2024 01:08:00 +0800 Subject: [PATCH] jxl support (#398) Signed-off-by: songjiayang --- resources/jxl-8bit-grey-icc-dot-gain.jxl | Bin 0 -> 69843 bytes vips/foreign.c | 25 +++++++++++++- vips/foreign.go | 26 +++++++++++++++ vips/foreign.h | 9 ++++- vips/foreign_test.go | 11 +++++++ vips/header.go | 3 ++ vips/image.go | 40 +++++++++++++++++++++++ 7 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 resources/jxl-8bit-grey-icc-dot-gain.jxl diff --git a/resources/jxl-8bit-grey-icc-dot-gain.jxl b/resources/jxl-8bit-grey-icc-dot-gain.jxl new file mode 100644 index 0000000000000000000000000000000000000000..e84177fbb8ee45faf4f525758ce655e77699dbf0 GIT binary patch literal 69843 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 literal 0 HcmV?d00001 diff --git a/vips/foreign.c b/vips/foreign.c index 1e1b723c..f374f8ec 100644 --- a/vips/foreign.c +++ b/vips/foreign.c @@ -153,6 +153,11 @@ int set_jp2kload_options(VipsOperation *operation, LoadParams *params) { return 0; } +int set_jxlload_options(VipsOperation *operation, LoadParams *params) { + // nothing need to do + return 0; +} + int set_magickload_options(VipsOperation *operation, LoadParams *params) { MAYBE_SET_INT(operation, params->page, "page"); MAYBE_SET_INT(operation, params->n, "n"); @@ -399,6 +404,19 @@ int set_jp2ksave_options(VipsOperation *operation, SaveParams *params) { return ret; } +int set_jxlsave_options(VipsOperation *operation, SaveParams *params) { + int ret = vips_object_set( + VIPS_OBJECT(operation), "tier", params->jxlTier, + "distance", params->jxlDistance, "effort", params->jxlEffort, + "lossless", params->jxlLossless, NULL); + + if (!ret && params->quality) { + ret = vips_object_set(VIPS_OBJECT(operation), "Q", params->quality, NULL); + } + + return ret; +} + int load_from_buffer(LoadParams *params, void *buf, size_t len) { switch (params->inputFormat) { case JPEG: @@ -431,9 +449,12 @@ int load_from_buffer(LoadParams *params, void *buf, size_t len) { case AVIF: return load_buffer("heifload_buffer", buf, len, params, set_heifload_options); - case JP2K: + case JP2K: return load_buffer("jp2kload_buffer", buf, len, params, set_jp2kload_options); + case JXL: + return load_buffer("jxlload_buffer", buf, len, params, + set_jxlload_options); default: g_warning("Unsupported input type given: %d", params->inputFormat); } @@ -462,6 +483,8 @@ int save_to_buffer(SaveParams *params) { return save_buffer("heifsave_buffer", params, set_avifsave_options); case JP2K: return save_buffer("jp2ksave_buffer", params, set_jp2ksave_options); + case JXL: + return save_buffer("jxlsave_buffer", params, set_jxlsave_options); default: g_warning("Unsupported output type given: %d", params->outputFormat); } diff --git a/vips/foreign.go b/vips/foreign.go index 035dec43..a8e22ae5 100644 --- a/vips/foreign.go +++ b/vips/foreign.go @@ -44,6 +44,7 @@ const ( ImageTypeBMP ImageType = C.BMP ImageTypeAVIF ImageType = C.AVIF ImageTypeJP2K ImageType = C.JP2K + ImageTypeJXL ImageType = C.JXL ) var imageTypeExtensionMap = map[ImageType]string{ @@ -59,6 +60,7 @@ var imageTypeExtensionMap = map[ImageType]string{ ImageTypeBMP: ".bmp", ImageTypeAVIF: ".avif", ImageTypeJP2K: ".jp2", + ImageTypeJXL: ".jxl", } // ImageTypes defines the various image types supported by govips @@ -75,6 +77,7 @@ var ImageTypes = map[ImageType]string{ ImageTypeBMP: "bmp", ImageTypeAVIF: "heif", ImageTypeJP2K: "jp2k", + ImageTypeJXL: "jxl", } // TiffCompression represents method for compressing a tiff at export @@ -157,6 +160,8 @@ func DetermineImageType(buf []byte) ImageType { return ImageTypeBMP } else if isJP2K(buf) { return ImageTypeJP2K + } else if isJXL(buf) { + return ImageTypeJXL } else { return ImageTypeUnknown } @@ -252,6 +257,12 @@ func isJP2K(buf []byte) bool { return bytes.HasPrefix(buf, jp2kHeader) } +var jxlHeader = []byte("\xff\x0a") + +func isJXL(buf []byte) bool { + return bytes.HasPrefix(buf, jxlHeader) +} + func vipsLoadFromBuffer(buf []byte, params *ImportParams) (*C.VipsImage, ImageType, ImageType, error) { src := buf // Reference src here so it's not garbage collected during image initialization. @@ -461,6 +472,21 @@ func vipsSaveGIFToBuffer(in *C.VipsImage, params GifExportParams) ([]byte, error return vipsSaveToBuffer(p) } +func vipsSaveJxlToBuffer(in *C.VipsImage, params JxlExportParams) ([]byte, error) { + incOpCounter("save_jxl_buffer") + + p := C.create_save_params(C.JXL) + p.inputImage = in + p.outputFormat = C.JXL + p.quality = C.int(params.Quality) + p.jxlLossless = C.int(boolToInt(params.Lossless)) + p.jxlTier = C.int(params.Tier) + p.jxlDistance = C.double(params.Distance) + p.jxlEffort = C.int(params.Effort) + + return vipsSaveToBuffer(p) +} + func vipsSaveToBuffer(params C.struct_SaveParams) ([]byte, error) { if err := C.save_to_buffer(¶ms); err != 0 { return nil, handleSaveBufferError(params.outputBuffer) diff --git a/vips/foreign.h b/vips/foreign.h index fcbd1bc8..f9d0fd8b 100644 --- a/vips/foreign.h +++ b/vips/foreign.h @@ -25,7 +25,8 @@ typedef enum types { HEIF, BMP, AVIF, - JP2K + JP2K, + JXL } ImageType; typedef enum ParamType { @@ -124,6 +125,12 @@ typedef struct SaveParams { BOOL jp2kLossless; int jp2kTileWidth; int jp2kTileHeight; + + // JXL + int jxlTier; + double jxlDistance; + int jxlEffort; + BOOL jxlLossless; } SaveParams; SaveParams create_save_params(ImageType outputFormat); diff --git a/vips/foreign_test.go b/vips/foreign_test.go index 9a49e154..5cd62d63 100644 --- a/vips/foreign_test.go +++ b/vips/foreign_test.go @@ -138,3 +138,14 @@ func Test_DetermineImageType__JP2K(t *testing.T) { imageType := DetermineImageType(buf) assert.Equal(t, ImageTypeJP2K, imageType) } + +func Test_DetermineImageType__JXL(t *testing.T) { + Startup(&Config{}) + + buf, err := ioutil.ReadFile(resources + "jxl-8bit-grey-icc-dot-gain.jxl") + assert.NoError(t, err) + assert.NotNil(t, buf) + + imageType := DetermineImageType(buf) + assert.Equal(t, ImageTypeJXL, imageType) +} diff --git a/vips/header.go b/vips/header.go index f5e58bc5..a85e47c5 100644 --- a/vips/header.go +++ b/vips/header.go @@ -173,6 +173,9 @@ func vipsDetermineImageTypeFromMetaLoader(in *C.VipsImage) ImageType { if strings.HasPrefix(vipsLoader, "jp2k") { return ImageTypeJP2K } + if strings.HasPrefix(vipsLoader, "jxl") { + return ImageTypeJXL + } if strings.HasPrefix(vipsLoader, "magick") { return ImageTypeMagick } diff --git a/vips/image.go b/vips/image.go index 7d4339f5..42e334e1 100644 --- a/vips/image.go +++ b/vips/image.go @@ -385,6 +385,24 @@ func NewJp2kExportParams() *Jp2kExportParams { } } +// JxlExportParams are options when exporting an JXL to file or buffer. +type JxlExportParams struct { + Quality int + Lossless bool + Tier int + Distance float64 + Effort int +} + +// NewJxlExportParams creates default values for an export of an JXL image. +func NewJxlExportParams() *JxlExportParams { + return &JxlExportParams{ + Quality: 75, + Lossless: false, + Effort: 7, + } +} + // NewImageFromReader loads an ImageRef from the given reader func NewImageFromReader(r io.Reader) (*ImageRef, error) { buf, err := ioutil.ReadAll(r) @@ -844,6 +862,12 @@ func (r *ImageRef) Export(params *ExportParams) ([]byte, *ImageMetadata, error) Lossless: params.Lossless, Speed: params.Speed, }) + case ImageTypeJXL: + return r.ExportJxl(&JxlExportParams{ + Quality: params.Quality, + Lossless: params.Lossless, + Effort: params.Effort, + }) default: format = ImageTypeJPEG return r.ExportJpeg(&JpegExportParams{ @@ -879,6 +903,8 @@ func (r *ImageRef) ExportNative() ([]byte, *ImageMetadata, error) { return r.ExportJp2k(NewJp2kExportParams()) case ImageTypeGIF: return r.ExportGIF(NewGifExportParams()) + case ImageTypeJXL: + return r.ExportJxl(NewJxlExportParams()) default: return r.ExportJpeg(NewJpegExportParams()) } @@ -999,6 +1025,20 @@ func (r *ImageRef) ExportJp2k(params *Jp2kExportParams) ([]byte, *ImageMetadata, return buf, r.newMetadata(ImageTypeJP2K), nil } +// ExportJxl exports the image as JPEG XL to a buffer. +func (r *ImageRef) ExportJxl(params *JxlExportParams) ([]byte, *ImageMetadata, error) { + if params == nil { + params = NewJxlExportParams() + } + + buf, err := vipsSaveJxlToBuffer(r.image, *params) + if err != nil { + return nil, nil, err + } + + return buf, r.newMetadata(ImageTypeJXL), nil +} + // CompositeMulti composites the given overlay image on top of the associated image with provided blending mode. func (r *ImageRef) CompositeMulti(ins []*ImageComposite) error { out, err := vipsComposite(toVipsCompositeStructs(r, ins))