mirror of
https://github.com/photoprism/photoprism.git
synced 2025-10-25 18:01:49 +08:00
Thumbs: Improve rendering performance with libvips #1474
Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
@@ -114,7 +114,15 @@ func (m *MediaFile) CreateThumbnails(thumbPath string, force bool) (err error) {
|
||||
if thumb.Library == thumb.LibVips {
|
||||
// Only create a thumbnail if its size does not exceed the size of the original image.
|
||||
if m.CreateThumbnailSize(size) {
|
||||
_, err = thumb.Vips(m.FileName(), hash, thumbPath, size.Width, size.Height, m.Orientation(), size.Options...)
|
||||
srcFile := m.FileName()
|
||||
|
||||
// If possible, use existing thumbnail file to create smaller sizes.
|
||||
if thumbFile, srcErr := thumb.Sizes[size.Source].FileName(hash, thumbPath); srcErr == nil && fs.FileExistsNotEmpty(thumbFile) {
|
||||
srcFile = thumbFile
|
||||
}
|
||||
|
||||
// Generate thumbnail with libvips.
|
||||
_, err = thumb.Vips(srcFile, hash, thumbPath, size.Width, size.Height, m.Orientation(), size.Options...)
|
||||
}
|
||||
} else {
|
||||
// Open original if needed.
|
||||
|
||||
@@ -25,9 +25,7 @@ func Init(availableMemory uint64, maxWorkers int, imgLib string) {
|
||||
// before libvips drops cached operations.
|
||||
switch {
|
||||
case availableMemory >= 4*GiB:
|
||||
MaxCacheMem = 1 * GiB
|
||||
case availableMemory >= 2*GiB:
|
||||
MaxCacheMem = 512 * GiB
|
||||
MaxCacheMem = 512 * MiB
|
||||
case availableMemory >= 1*GiB:
|
||||
MaxCacheMem = 256 * MiB
|
||||
case availableMemory <= 0:
|
||||
|
||||
@@ -17,7 +17,7 @@ func TestInit(t *testing.T) {
|
||||
})
|
||||
t.Run("4GiB", func(t *testing.T) {
|
||||
Init(4*GiB, 16, LibVips)
|
||||
assert.Equal(t, GiB, MaxCacheMem)
|
||||
assert.Equal(t, 512*MiB, MaxCacheMem)
|
||||
assert.Equal(t, 16, NumWorkers)
|
||||
assert.Equal(t, LibVips, Library)
|
||||
})
|
||||
|
||||
@@ -40,11 +40,11 @@ var (
|
||||
SizeTile50 = Size{Tile50, Tile500, "List View", 50, 50, false, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}
|
||||
SizeTile100 = Size{Tile100, Tile500, "Places View", 100, 100, false, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}
|
||||
SizeTile224 = Size{Tile224, Tile500, "TensorFlow, Mosaic View", 224, 224, false, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}
|
||||
SizeTile500 = Size{Tile500, "", "Cards View", 500, 500, false, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}
|
||||
SizeTile500 = Size{Tile500, Fit2048, "Cards View", 500, 500, false, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}
|
||||
SizeColors = Size{Colors, Fit720, "Color Detection", 3, 3, false, false, []ResampleOption{ResampleResize, ResampleNearestNeighbor, ResamplePng}}
|
||||
SizeLeft224 = Size{Left224, Fit720, "TensorFlow", 224, 224, false, false, []ResampleOption{ResampleFillTopLeft, ResampleDefault}}
|
||||
SizeRight224 = Size{Right224, Fit720, "TensorFlow", 224, 224, false, false, []ResampleOption{ResampleFillBottomRight, ResampleDefault}}
|
||||
SizeFit720 = Size{Fit720, "", "SD TV, Mobile", 720, 720, true, true, []ResampleOption{ResampleFit, ResampleDefault}}
|
||||
SizeFit720 = Size{Fit720, Fit1280, "SD TV, Mobile", 720, 720, true, true, []ResampleOption{ResampleFit, ResampleDefault}}
|
||||
SizeFit1280 = Size{Fit1280, Fit2048, "HD TV, SXGA", 1280, 1024, true, true, []ResampleOption{ResampleFit, ResampleDefault}}
|
||||
SizeFit1920 = Size{Fit1920, Fit2048, "Full HD", 1920, 1200, true, true, []ResampleOption{ResampleFit, ResampleDefault}}
|
||||
)
|
||||
@@ -61,9 +61,9 @@ var Sizes = SizeMap{
|
||||
Fit720: SizeFit720,
|
||||
Fit1280: SizeFit1280,
|
||||
Fit1920: SizeFit1920,
|
||||
Fit2048: {Fit2048, "", "DCI 2K, Tablets", 2048, 2048, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
Fit2560: {Fit2560, "", "Quad HD, Notebooks", 2560, 1600, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
Fit3840: {Fit3840, "", "4K Ultra HD", 3840, 2400, true, true, []ResampleOption{ResampleFit, ResampleDefault}}, // Deprecated in favor of fit_4096
|
||||
Fit2048: {Fit2048, Fit4096, "DCI 2K, Tablets", 2048, 2048, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
Fit2560: {Fit2560, Fit3840, "Quad HD, Notebooks", 2560, 1600, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
Fit3840: {Fit3840, Fit7680, "4K Ultra HD", 3840, 2400, true, true, []ResampleOption{ResampleFit, ResampleDefault}}, // Deprecated in favor of fit_4096
|
||||
Fit4096: {Fit4096, "", "DCI 4K, Retina 4K", 4096, 4096, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
Fit7680: {Fit7680, "", "8K Ultra HD 2", 7680, 4320, true, true, []ResampleOption{ResampleFit, ResampleDefault}},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user