Files
photoprism/internal/thumb/vips_icc_test.go
2025-11-23 12:56:58 +01:00

76 lines
2.6 KiB
Go

package thumb
import (
"testing"
"github.com/davidbyttow/govips/v2/vips"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestVipsSetIccProfileForInteropIndex(t *testing.T) {
t.Run("PreservesExistingProfile", func(t *testing.T) {
VipsInit()
img, err := vips.LoadImageFromFile("testdata/interop_index_srgb_icc.jpg", VipsImportParams())
require.NoError(t, err)
iiFull := img.GetString("exif-ifd4-InteroperabilityIndex")
require.NotEmpty(t, iiFull)
require.True(t, img.HasICCProfile())
originalProfile := img.GetICCProfile()
require.NotEmpty(t, originalProfile)
err = vipsSetIccProfileForInteropIndex(img, "interop_index_srgb_icc.jpg")
assert.NoError(t, err)
assert.True(t, img.HasICCProfile())
assert.Equal(t, originalProfile, img.GetICCProfile())
})
t.Run("EmbedsAdobeProfileWhenMissing", func(t *testing.T) {
VipsInit()
img, err := vips.LoadImageFromFile("testdata/interop_index.jpg", VipsImportParams())
require.NoError(t, err)
require.False(t, img.HasICCProfile(), "fixture should have no embedded ICC profile")
err = vipsSetIccProfileForInteropIndex(img, "interop_index.jpg")
assert.NoError(t, err)
assert.True(t, img.HasICCProfile(), "Adobe ICC profile should be embedded based on InteropIndex R03")
assert.NotEmpty(t, img.GetICCProfile())
})
t.Run("NoInteropIndexNoop", func(t *testing.T) {
VipsInit()
img, err := vips.LoadImageFromFile("testdata/example.jpg", VipsImportParams())
require.NoError(t, err)
hasICCBefore := img.HasICCProfile()
err = vipsSetIccProfileForInteropIndex(img, "example.jpg")
assert.NoError(t, err)
assert.Equal(t, hasICCBefore, img.HasICCProfile())
})
t.Run("InteropIndexSRGB_NoEmbed", func(t *testing.T) {
VipsInit()
img, err := vips.LoadImageFromFile("testdata/interop_index_r98.jpg", VipsImportParams())
require.NoError(t, err)
require.False(t, img.HasICCProfile(), "fixture should have no embedded ICC profile")
err = vipsSetIccProfileForInteropIndex(img, "interop_index_r98.jpg")
assert.NoError(t, err)
assert.False(t, img.HasICCProfile(), "sRGB interop index should remain without embedded ICC")
})
t.Run("InteropIndexThumb_NoEmbed", func(t *testing.T) {
VipsInit()
img, err := vips.LoadImageFromFile("testdata/interop_index_thm.jpg", VipsImportParams())
require.NoError(t, err)
require.False(t, img.HasICCProfile(), "fixture should have no embedded ICC profile")
err = vipsSetIccProfileForInteropIndex(img, "interop_index_thm.jpg")
assert.NoError(t, err)
assert.False(t, img.HasICCProfile(), "THM interop index should remain without embedded ICC")
})
}