images

package
v0.130.0 Latest Latest
Warning

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

Go to latest
Published: Jul 29, 2024 License: Apache-2.0 Imports: 37 Imported by: 5

Documentation

Overview

Package images provides template functions for manipulating images.

Index

Constants

View Source
const (
	ActionResize = "resize"
	ActionCrop   = "crop"
	ActionFit    = "fit"
	ActionFill   = "fill"
)

Variables

This section is empty.

Functions

func AddColorToPalette added in v0.59.0

func AddColorToPalette(c color.Color, p color.Palette) color.Palette

AddColorToPalette adds c as the first color in p if not already there. Note that it does no additional checks, so callers must make sure that the palette is valid for the relevant format.

func ColorGoToHexString added in v0.125.0

func ColorGoToHexString(c color.Color) string

ColorGoToHexString converts a color.Color to a hex string.

func IsOpaque added in v0.59.0

func IsOpaque(img image.Image) bool

IsOpaque returns false if the image has alpha channel and there is at least 1 pixel that is not (fully) opaque.

func ReplaceColorInPalette added in v0.59.0

func ReplaceColorInPalette(c color.Color, p color.Palette)

ReplaceColorInPalette will replace the color in palette p closest to c in Euclidean R,G,B,A space with c.

func ToFilters

func ToFilters(in any) []gift.Filter

ToFilters converts the given input to a slice of gift.Filter.

func UnwrapFilter added in v0.119.0

func UnwrapFilter(in gift.Filter) gift.Filter

UnwrapFilter unwraps the given filter if it is a filter wrapper.

Types

type Color added in v0.125.0

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

func ColorGoToColor added in v0.125.0

func ColorGoToColor(c color.Color) Color

ColorGoToColor converts a color.Color to a Color.

func HexStringsToColors added in v0.125.0

func HexStringsToColors(s ...string) []Color

HexStringsToColors converts a slice of hex strings to a slice of Colors.

func (Color) ColorGo added in v0.125.0

func (c Color) ColorGo() color.Color

ColorGo returns the color as a color.Color. For internal use only.

func (Color) ColorHex added in v0.125.0

func (c Color) ColorHex() string

ColorHex returns the color as a hex string prefixed with a #.

func (Color) Hash added in v0.125.0

func (c Color) Hash() (uint64, error)

For hashstructure. This struct is used in template func options that needs to be able to hash a Color. For internal use only.

func (Color) Luminance added in v0.125.0

func (c Color) Luminance() float64

Luminance as defined by w3.org. See https://www.w3.org/TR/WCAG21/#dfn-relative-luminance

func (Color) String added in v0.125.0

func (c Color) String() string

String returns the color as a hex string prefixed with a #.

type ExifConfig

type ExifConfig struct {
	// Regexp matching the Exif fields you want from the (massive) set of Exif info
	// available. As we cache this info to disk, this is for performance and
	// disk space reasons more than anything.
	// If you want it all, put ".*" in this config setting.
	// Note that if neither this or ExcludeFields is set, Hugo will return a small
	// default set.
	IncludeFields string

	// Regexp matching the Exif fields you want to exclude. This may be easier to use
	// than IncludeFields above, depending on what you want.
	ExcludeFields string

	// Hugo extracts the "photo taken" date/time into .Date by default.
	// Set this to true to turn it off.
	DisableDate bool

	// Hugo extracts the "photo taken where" (GPS latitude and longitude) into
	// .Long and .Lat. Set this to true to turn it off.
	DisableLatLong bool
}

type Filters

type Filters struct{}

func (*Filters) AutoOrient added in v0.121.2

func (*Filters) AutoOrient() gift.Filter

AutoOrient creates a filter that rotates and flips an image as needed per its EXIF orientation tag.

func (*Filters) Brightness

func (*Filters) Brightness(percentage any) gift.Filter

Brightness creates a filter that changes the brightness of an image. The percentage parameter must be in range (-100, 100).

func (*Filters) ColorBalance

func (*Filters) ColorBalance(percentageRed, percentageGreen, percentageBlue any) gift.Filter

ColorBalance creates a filter that changes the color balance of an image. The percentage parameters for each color channel (red, green, blue) must be in range (-100, 500).

func (*Filters) Colorize

func (*Filters) Colorize(hue, saturation, percentage any) gift.Filter

Colorize creates a filter that produces a colorized version of an image. The hue parameter is the angle on the color wheel, typically in range (0, 360). The saturation parameter must be in range (0, 100). The percentage parameter specifies the strength of the effect, it must be in range (0, 100).

func (*Filters) Contrast

func (*Filters) Contrast(percentage any) gift.Filter

Contrast creates a filter that changes the contrast of an image. The percentage parameter must be in range (-100, 100).

func (*Filters) Dither added in v0.123.0

func (*Filters) Dither(options ...any) gift.Filter

Dither creates a filter that dithers an image.

func (*Filters) Gamma

func (*Filters) Gamma(gamma any) gift.Filter

Gamma creates a filter that performs a gamma correction on an image. The gamma parameter must be positive. Gamma = 1 gives the original image. Gamma less than 1 darkens the image and gamma greater than 1 lightens it.

func (*Filters) GaussianBlur

func (*Filters) GaussianBlur(sigma any) gift.Filter

GaussianBlur creates a filter that applies a gaussian blur to an image.

func (*Filters) Grayscale

func (*Filters) Grayscale() gift.Filter

Grayscale creates a filter that produces a grayscale version of an image.

func (*Filters) Hue

func (*Filters) Hue(shift any) gift.Filter

Hue creates a filter that rotates the hue of an image. The hue angle shift is typically in range -180 to 180.

func (*Filters) Invert

func (*Filters) Invert() gift.Filter

Invert creates a filter that negates the colors of an image.

func (*Filters) Opacity added in v0.119.0

func (*Filters) Opacity(opacity any) gift.Filter

Opacity creates a filter that changes the opacity of an image. The opacity parameter must be in range (0, 1).

func (*Filters) Overlay added in v0.80.0

func (*Filters) Overlay(src ImageSource, x, y any) gift.Filter

Overlay creates a filter that overlays src at position x y.

func (*Filters) Padding added in v0.120.0

func (*Filters) Padding(args ...any) gift.Filter

Padding creates a filter that resizes the image canvas without resizing the image. The last argument is the canvas color, expressed as an RGB or RGBA hexadecimal color. The default value is `ffffffff` (opaque white). The preceding arguments are the padding values, in pixels, using the CSS shorthand property syntax. Negative padding values will crop the image. The signature is images.Padding V1 [V2] [V3] [V4] [COLOR].

func (*Filters) Pixelate

func (*Filters) Pixelate(size any) gift.Filter

Pixelate creates a filter that applies a pixelation effect to an image.

func (*Filters) Process added in v0.119.0

func (*Filters) Process(spec any) gift.Filter

Process creates a filter that processes an image using the given specification.

func (*Filters) Saturation

func (*Filters) Saturation(percentage any) gift.Filter

Saturation creates a filter that changes the saturation of an image.

func (*Filters) Sepia

func (*Filters) Sepia(percentage any) gift.Filter

Sepia creates a filter that produces a sepia-toned version of an image.

func (*Filters) Sigmoid

func (*Filters) Sigmoid(midpoint, factor any) gift.Filter

Sigmoid creates a filter that changes the contrast of an image using a sigmoidal function and returns the adjusted image. It's a non-linear contrast change useful for photo adjustments as it preserves highlight and shadow detail.

func (*Filters) Text added in v0.90.0

func (*Filters) Text(text string, options ...any) gift.Filter

Text creates a filter that draws text with the given options.

func (*Filters) UnsharpMask

func (*Filters) UnsharpMask(sigma, amount, threshold any) gift.Filter

UnsharpMask creates a filter that sharpens an image. The sigma parameter is used in a gaussian function and affects the radius of effect. Sigma must be positive. Sharpen radius roughly equals 3 * sigma. The amount parameter controls how much darker and how much lighter the edge borders become. Typically between 0.5 and 1.5. The threshold parameter controls the minimum brightness change that will be sharpened. Typically between 0 and 0.05.

type Format

type Format int

Format is an image file format.

const (
	JPEG Format = iota + 1
	PNG
	GIF
	TIFF
	BMP
	WEBP
)

func ImageFormatFromExt

func ImageFormatFromExt(ext string) (Format, bool)

func ImageFormatFromMediaSubType added in v0.91.0

func ImageFormatFromMediaSubType(sub string) (Format, bool)

func (Format) DefaultExtension added in v0.59.0

func (f Format) DefaultExtension() string

DefaultExtension returns the default file extension of this format, starting with a dot. For example: .jpg for JPEG

func (Format) MediaType added in v0.59.0

func (f Format) MediaType() media.Type

MediaType returns the media type of this image, e.g. image/jpeg for JPEG

func (Format) RequiresDefaultQuality added in v0.59.0

func (f Format) RequiresDefaultQuality() bool

RequiresDefaultQuality returns if the default quality needs to be applied to images of this format.

func (Format) SupportsTransparency added in v0.59.0

func (f Format) SupportsTransparency() bool

SupportsTransparency reports whether it supports transparency in any form.

func (Format) ToImageMetaImageFormatFormat added in v0.130.0

func (f Format) ToImageMetaImageFormatFormat() imagemeta.ImageFormat

type Giphy added in v0.101.0

type Giphy interface {
	image.Image    // The first frame.
	GIF() *gif.GIF // All frames.
}

Giphy represents a GIF Image that may be animated.

type Image

type Image struct {
	Format Format
	Proc   *ImageProcessor
	Spec   Spec
	// contains filtered or unexported fields
}

func NewImage

func NewImage(f Format, proc *ImageProcessor, img image.Image, s Spec) *Image

func (*Image) EncodeTo

func (i *Image) EncodeTo(conf ImageConfig, img image.Image, w io.Writer) error

func (*Image) Height

func (i *Image) Height() int

Height returns i's height.

func (*Image) InitConfig added in v0.60.0

func (i *Image) InitConfig(r io.Reader) error

InitConfig reads the image config from the given reader.

func (*Image) Width

func (i *Image) Width() int

Width returns i's width.

func (Image) WithImage

func (i Image) WithImage(img image.Image) *Image

func (Image) WithSpec

func (i Image) WithSpec(s Spec) *Image

type ImageConfig

type ImageConfig struct {
	// This defines the output format of the output image. It defaults to the source format.
	TargetFormat Format

	Action string

	// If set, this will be used as the key in filenames etc.
	Key string

	// Quality ranges from 1 to 100 inclusive, higher is better.
	// This is only relevant for JPEG and WEBP images.
	// Default is 75.
	Quality int

	// Rotate rotates an image by the given angle counter-clockwise.
	// The rotation will be performed first.
	Rotate int

	// Used to fill any transparency.
	// When set in site config, it's used when converting to a format that does
	// not support transparency.
	// When set per image operation, it's used even for formats that does support
	// transparency.
	BgColor    color.Color
	BgColorStr string

	// Hint about what type of picture this is. Used to optimize encoding
	// when target is set to webp.
	Hint webpoptions.EncodingPreset

	Width  int
	Height int

	Filter    gift.Resampling
	FilterStr string

	Anchor    gift.Anchor
	AnchorStr string
	// contains filtered or unexported fields
}

ImageConfig holds configuration to create a new image from an existing one, resize etc.

func DecodeImageConfig

func DecodeImageConfig(action string, options []string, defaults *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal], sourceFormat Format) (ImageConfig, error)

func GetDefaultImageConfig added in v0.83.0

func GetDefaultImageConfig(action string, defaults *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]) ImageConfig

func (ImageConfig) GetKey

func (i ImageConfig) GetKey(format Format) string

type ImageFilterFromOrientationProvider added in v0.121.2

type ImageFilterFromOrientationProvider interface {
	AutoOrient(exifInfo *exif.ExifInfo) gift.Filter
}

type ImageProcessSpecProvider added in v0.119.0

type ImageProcessSpecProvider interface {
	ImageProcessSpec() string
}

type ImageProcessor

type ImageProcessor struct {
	Cfg *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]
	// contains filtered or unexported fields
}

func (*ImageProcessor) ApplyFiltersFromConfig

func (p *ImageProcessor) ApplyFiltersFromConfig(src image.Image, conf ImageConfig) (image.Image, error)

func (*ImageProcessor) DecodeExif

func (p *ImageProcessor) DecodeExif(filename string, format imagemeta.ImageFormat, r io.Reader) (*exif.ExifInfo, error)

Filename is only used for logging.

func (*ImageProcessor) Filter

func (p *ImageProcessor) Filter(src image.Image, filters ...gift.Filter) (image.Image, error)

func (*ImageProcessor) FiltersFromConfig added in v0.119.0

func (p *ImageProcessor) FiltersFromConfig(src image.Image, conf ImageConfig) ([]gift.Filter, error)

type ImageResource added in v0.98.0

type ImageResource interface {
	resource.Resource
	ImageResourceOps
}

ImageResource represents an image resource.

type ImageResourceOps added in v0.98.0

type ImageResourceOps interface {
	// Height returns the height of the Image.
	Height() int

	// Width returns the width of the Image.
	Width() int

	// Process applies the given image processing options to the image.
	Process(spec string) (ImageResource, error)

	// Crop an image to match the given dimensions without resizing.
	// You must provide both width and height.
	// Use the anchor option to change the crop box anchor point.
	//    {{ $image := $image.Crop "600x400" }}
	Crop(spec string) (ImageResource, error)

	// Fill scales the image to the smallest possible size that will cover the specified dimensions in spec,
	// crops the resized image to the specified dimensions using the given anchor point.
	// The spec is space delimited, e.g. `200x300 TopLeft`.
	Fill(spec string) (ImageResource, error)

	// Fit scales down the image using the given spec.
	Fit(spec string) (ImageResource, error)

	// Resize resizes the image to the given spec. If one of width or height is 0, the image aspect
	// ratio is preserved.
	Resize(spec string) (ImageResource, error)

	// Filter applies one or more filters to an Image.
	//    {{ $image := $image.Filter (images.GaussianBlur 6) (images.Pixelate 8) }}
	Filter(filters ...any) (ImageResource, error)

	// Exif returns an ExifInfo object containing Image metadata.
	Exif() *exif.ExifInfo

	// Colors returns a slice of the most dominant colors in an image
	// using a simple histogram method.
	Colors() ([]Color, error)

	// For internal use.
	DecodeImage() (image.Image, error)
}

type ImageSource added in v0.80.0

type ImageSource interface {
	DecodeImage() (image.Image, error)
	Key() string
}

ImageSource identifies and decodes an image.

type ImagingConfig added in v0.59.0

type ImagingConfig struct {
	// Default image quality setting (1-100). Only used for JPEG images.
	Quality int

	// Resample filter to use in resize operations.
	ResampleFilter string

	// Hint about what type of image this is.
	// Currently only used when encoding to Webp.
	// Default is "photo".
	// Valid values are "picture", "photo", "drawing", "icon", or "text".
	Hint string

	// The anchor to use in Fill. Default is "smart", i.e. Smart Crop.
	Anchor string

	// Default color used in fill operations (e.g. "fff" for white).
	BgColor string

	Exif ExifConfig
}

ImagingConfig contains default image processing configuration. This will be fetched from site (or language) config.

type ImagingConfigInternal added in v0.112.0

type ImagingConfigInternal struct {
	BgColor        color.Color
	Hint           webpoptions.EncodingPreset
	ResampleFilter gift.Resampling
	Anchor         gift.Anchor

	Imaging ImagingConfig
}

func (*ImagingConfigInternal) Compile added in v0.112.0

func (i *ImagingConfigInternal) Compile(externalCfg *ImagingConfig) error

type Spec

type Spec interface {
	// Loads the image source.
	ReadSeekCloser() (hugio.ReadSeekCloser, error)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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