preview

package
v0.0.0-...-da0c8bd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2026 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUnsupportedFormat = errors.New("preview is not available for provided file format")
	ErrUnsupportedMedia  = errors.New("unsupported media type")
	ErrPreviewTooSmall   = errors.New("generated image is too small, likely an error occurred")
)

Functions

func CacheKey

func CacheKey(md5, previewSize string, percentage int) string

func CreateThumbnail

func CreateThumbnail(rawData io.Reader, width, height int) (image.Image, error)

CreateThumbnail decodes an image and creates a fixed-size thumbnail.

func DelThumbs

func DelThumbs(ctx context.Context, file iteminfo.ExtendedFileInfo)

func ExtractEmbeddedPreview

func ExtractEmbeddedPreview(ctx context.Context, realPath, fileType string) ([]byte, error)

ExtractEmbeddedPreview runs exiftool on the given file to extract an embedded preview image (e.g. JpgFromRaw, PreviewImage, ThumbnailImage). Returns the first non-empty result, or nil if exiftool is unavailable or no embedded preview exists. fileType is the MIME type (e.g. "image/x-canon-cr2", "image/heic", "video/quicktime").

func GeneratePreview

func GeneratePreview(ctx context.Context, file iteminfo.ExtendedFileInfo, previewSize, officeUrl string, seekPercentage int) ([]byte, error)

func GeneratePreviewWithMD5

func GeneratePreviewWithMD5(ctx context.Context, file iteminfo.ExtendedFileInfo, previewSize, officeUrl string, seekPercentage int, fileMD5 string) ([]byte, error)

func GetOrientation

func GetOrientation(ctx context.Context, realPath string) string

GetOrientation returns the EXIF orientation string for the file (e.g. "Rotate 90 CW", "Horizontal (normal)"). Uses exiftool -Orientation -s3. Returns empty string if exiftool is unavailable or orientation cannot be read.

func GetPreviewForFile

func GetPreviewForFile(ctx context.Context, file iteminfo.ExtendedFileInfo, previewSize, url string, seekPercentage int) ([]byte, error)

func StartPreviewGenerator

func StartPreviewGenerator(concurrencyLimit int, cacheDir string) error

Types

type Format

type Format int

Format is an image file format.

ENUM( jpeg png gif tiff bmp heic webp pbm pgm ppm pam )

const (
	// FormatJpeg is a Format of type Jpeg
	FormatJpeg Format = iota
	// FormatPng is a Format of type Png
	FormatPng
	// FormatGif is a Format of type Gif
	FormatGif
	// FormatTiff is a Format of type Tiff
	FormatTiff
	// FormatBmp is a Format of type Bmp
	FormatBmp
	// FormatHeic is a Format of type Heic
	FormatHeic
	// FormatWebp is a Format of type Webp
	FormatWebp
	// FormatPbm is a Format of type Pbm
	FormatPbm
	// FormatPgm is a Format of type Pgm
	FormatPgm
	// FormatPpm is a Format of type Ppm
	FormatPpm
	// FormatPam is a Format of type Pam
	FormatPam
)

func ParseFormat

func ParseFormat(name string) (Format, error)

ParseFormat attempts to convert a string to a Format

func (Format) MarshalText

func (x Format) MarshalText() ([]byte, error)

MarshalText implements the text marshaller method

func (*Format) Scan

func (x *Format) Scan(value interface{}) error

Scan implements the Scanner interface.

func (Format) String

func (x Format) String() string

String implements the Stringer interface.

func (*Format) UnmarshalText

func (x *Format) UnmarshalText(text []byte) error

UnmarshalText implements the text unmarshaller method

func (Format) Value

func (x Format) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type MemoryTracker

type MemoryTracker struct {
	// contains filtered or unexported fields
}

MemoryTracker wraps the existing FFmpegService to add memory tracking

func NewMemoryTracker

func NewMemoryTracker(maxConcurrent int, maxMemoryMB int) *MemoryTracker

NewMemoryTracker creates a memory-aware concurrency limiter

func (*MemoryTracker) Acquire

func (mt *MemoryTracker) Acquire(ctx context.Context, estimatedBytes int64) error

Acquire waits to acquire resources

func (*MemoryTracker) GetMemoryUsageMB

func (mt *MemoryTracker) GetMemoryUsageMB() int64

GetMemoryUsageMB returns current memory usage in MB

func (*MemoryTracker) Release

func (mt *MemoryTracker) Release(estimatedBytes int64)

Release frees up resources

func (*MemoryTracker) TryAcquire

func (mt *MemoryTracker) TryAcquire(ctx context.Context, estimatedBytes int64) bool

TryAcquire attempts to acquire resources for processing an image Returns false if memory limit would be exceeded

type Quality

type Quality int

ENUM( high medium low )

const (
	// QualityHigh is a Quality of type High
	QualityHigh Quality = iota
	// QualityMedium is a Quality of type Medium
	QualityMedium
	// QualityLow is a Quality of type Low
	QualityLow
)

func ParseQuality

func ParseQuality(name string) (Quality, error)

ParseQuality attempts to convert a string to a Quality

func (Quality) MarshalText

func (x Quality) MarshalText() ([]byte, error)

MarshalText implements the text marshaller method

func (*Quality) Scan

func (x *Quality) Scan(value interface{}) error

Scan implements the Scanner interface.

func (Quality) String

func (x Quality) String() string

String implements the Stringer interface.

func (*Quality) UnmarshalText

func (x *Quality) UnmarshalText(text []byte) error

UnmarshalText implements the text unmarshaller method

func (Quality) Value

func (x Quality) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type ResizeMode

type ResizeMode int

ENUM( fit fill )

const (
	// ResizeModeFit is a ResizeMode of type Fit
	ResizeModeFit ResizeMode = iota
	// ResizeModeFill is a ResizeMode of type Fill
	ResizeModeFill
)

func ParseResizeMode

func ParseResizeMode(name string) (ResizeMode, error)

ParseResizeMode attempts to convert a string to a ResizeMode

func (ResizeMode) MarshalText

func (x ResizeMode) MarshalText() ([]byte, error)

MarshalText implements the text marshaller method

func (*ResizeMode) Scan

func (x *ResizeMode) Scan(value interface{}) error

Scan implements the Scanner interface.

func (ResizeMode) String

func (x ResizeMode) String() string

String implements the Stringer interface.

func (*ResizeMode) UnmarshalText

func (x *ResizeMode) UnmarshalText(text []byte) error

UnmarshalText implements the text unmarshaller method

func (ResizeMode) Value

func (x ResizeMode) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type ResizeOptions

type ResizeOptions struct {
	Width       int
	Height      int
	Format      Format
	ResizeMode  ResizeMode
	Quality     Quality
	JpegQuality int // JPEG encoding quality (1-100), 0 means use Quality default
}

type Service

type Service struct {
	// contains filtered or unexported fields
}

func GetService

func GetService() *Service

GetService returns the preview service instance (can be nil if not started)

func NewPreviewGenerator

func NewPreviewGenerator(concurrencyLimit int, cacheDir string) *Service

Calculate split between small and large imaging library processors Distribution formula:

1 processor:  single image processor for all sizes
2 processors: 1 large, 1 small
3-6 processors: 2 large, rest small
7+ processors: 3 large, rest small

func (*Service) CreatePreview

func (s *Service) CreatePreview(reader io.Reader, fileSize int64, options ResizeOptions) ([]byte, error)

CreatePreview resizes an image from a reader with the given options

func (*Service) FormatFromExtension

func (s *Service) FormatFromExtension(ext string) (Format, error)

func (*Service) GenerateImageFromDoc

func (s *Service) GenerateImageFromDoc(ctx context.Context, file iteminfo.ExtendedFileInfo, tempFilePath string, pageNumber int) ([]byte, error)

func (*Service) GenerateOfficePreview

func (s *Service) GenerateOfficePreview(ctx context.Context, filetype, key, title, url string) ([]byte, error)

GenerateOfficePreview generates a preview for an office document using OnlyOffice. Note: Global image processor semaphore is acquired at GeneratePreviewWithMD5 level

func (*Service) GenerateVideoPreview

func (s *Service) GenerateVideoPreview(ctx context.Context, videoPath string, percentageSeek int) ([]byte, error)

GenerateVideoPreview generates a single preview image from a video using ffmpeg. videoPath: path to the input video file. percentageSeek: percentage of video duration to seek to (0–100). Returns: JPEG image bytes.

func (*Service) Resize

func (s *Service) Resize(in io.Reader, out io.Writer, opts ResizeOptions) error

func (*Service) ResizeWithSize

func (s *Service) ResizeWithSize(in io.Reader, out io.Writer, fileSize int64, opts ResizeOptions) error

ResizeWithSize resizes an image with file size information for appropriate semaphore selection

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL