mirror of
https://github.com/talgo-cloud/bimg.git
synced 2026-03-11 08:20:34 -07:00
Merge pull request #168 from Traum-Ferienwohnungen/icc_transform
Add option to convert embedded ICC profiles
This commit is contained in:
commit
cdec7db4dd
4 changed files with 22 additions and 1 deletions
|
|
@ -215,4 +215,5 @@ type Options struct {
|
|||
Interpretation Interpretation
|
||||
GaussianBlur GaussianBlur
|
||||
Sharpen Sharpen
|
||||
OutputICC string
|
||||
}
|
||||
|
|
|
|||
|
|
@ -161,6 +161,7 @@ func saveImage(image *C.VipsImage, o Options) ([]byte, error) {
|
|||
Interlace: o.Interlace,
|
||||
NoProfile: o.NoProfile,
|
||||
Interpretation: o.Interpretation,
|
||||
OutputICC: o.OutputICC,
|
||||
}
|
||||
// Finally get the resultant buffer
|
||||
return vipsSave(image, saveOptions)
|
||||
|
|
|
|||
15
vips.go
15
vips.go
|
|
@ -55,6 +55,7 @@ type vipsSaveOptions struct {
|
|||
Type ImageType
|
||||
Interlace bool
|
||||
NoProfile bool
|
||||
OutputICC string // Absolute path to the output ICC profile
|
||||
Interpretation Interpretation
|
||||
}
|
||||
|
||||
|
|
@ -362,6 +363,7 @@ func vipsFlattenBackground(image *C.VipsImage, background Color) (*C.VipsImage,
|
|||
}
|
||||
|
||||
func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) {
|
||||
var outImage *C.VipsImage
|
||||
// Remove ICC profile metadata
|
||||
if o.NoProfile {
|
||||
C.remove_profile(image)
|
||||
|
|
@ -374,7 +376,6 @@ func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) {
|
|||
interpretation := C.VipsInterpretation(o.Interpretation)
|
||||
|
||||
// Apply the proper colour space
|
||||
var outImage *C.VipsImage
|
||||
if vipsColourspaceIsSupported(image) {
|
||||
err := C.vips_colourspace_bridge(image, &outImage, interpretation)
|
||||
if int(err) != 0 {
|
||||
|
|
@ -383,6 +384,18 @@ func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) {
|
|||
image = outImage
|
||||
}
|
||||
|
||||
if o.OutputICC != "" && vipsHasProfile(image) {
|
||||
debug("Embedded ICC profile found, trying to convert to %s", o.OutputICC)
|
||||
outputIccPath := C.CString(o.OutputICC)
|
||||
defer C.free(unsafe.Pointer(outputIccPath))
|
||||
|
||||
err := C.vips_icc_transform_bridge(image, &outImage, outputIccPath)
|
||||
if int(err) != 0 {
|
||||
return nil, catchVipsError()
|
||||
}
|
||||
image = outImage
|
||||
}
|
||||
|
||||
return image, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
6
vips.h
6
vips.h
|
|
@ -260,6 +260,12 @@ vips_colourspace_bridge(VipsImage *in, VipsImage **out, VipsInterpretation space
|
|||
return vips_colourspace(in, out, space, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
vips_icc_transform_bridge (VipsImage *in, VipsImage **out, const char *output_icc_profile) {
|
||||
// `output_icc_profile` represents the absolute path to the output ICC profile file
|
||||
return vips_icc_transform(in, out, output_icc_profile, "embedded", TRUE, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
vips_jpegsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int quality, int interlace) {
|
||||
return vips_jpegsave_buffer(in, buf, len,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue