mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-29 22:29:56 +02:00
committed by
Bjørn Erik Pedersen
parent
0672b5c766
commit
21d9057dbf
71
resources/images/dither.go
Normal file
71
resources/images/dither.go
Normal file
@@ -0,0 +1,71 @@
|
||||
// Copyright 2024 The Hugo Authors. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package images
|
||||
|
||||
import (
|
||||
"image"
|
||||
"image/draw"
|
||||
|
||||
"github.com/disintegration/gift"
|
||||
"github.com/makeworld-the-better-one/dither/v2"
|
||||
)
|
||||
|
||||
var _ gift.Filter = (*ditherFilter)(nil)
|
||||
|
||||
type ditherFilter struct {
|
||||
ditherer *dither.Ditherer
|
||||
}
|
||||
|
||||
var ditherMethodsErrorDiffusion = map[string]dither.ErrorDiffusionMatrix{
|
||||
"atkinson": dither.Atkinson,
|
||||
"burkes": dither.Burkes,
|
||||
"falsefloydsteinberg": dither.FalseFloydSteinberg,
|
||||
"floydsteinberg": dither.FloydSteinberg,
|
||||
"jarvisjudiceninke": dither.JarvisJudiceNinke,
|
||||
"sierra": dither.Sierra,
|
||||
"sierra2": dither.Sierra2,
|
||||
"sierra2_4a": dither.Sierra2_4A,
|
||||
"sierra3": dither.Sierra3,
|
||||
"sierralite": dither.SierraLite,
|
||||
"simple2d": dither.Simple2D,
|
||||
"stevenpigeon": dither.StevenPigeon,
|
||||
"stucki": dither.Stucki,
|
||||
"tworowsierra": dither.TwoRowSierra,
|
||||
}
|
||||
|
||||
var ditherMethodsOrdered = map[string]dither.OrderedDitherMatrix{
|
||||
"clustereddot4x4": dither.ClusteredDot4x4,
|
||||
"clustereddot6x6": dither.ClusteredDot6x6,
|
||||
"clustereddot6x6_2": dither.ClusteredDot6x6_2,
|
||||
"clustereddot6x6_3": dither.ClusteredDot6x6_3,
|
||||
"clustereddot8x8": dither.ClusteredDot8x8,
|
||||
"clustereddotdiagonal16x16": dither.ClusteredDotDiagonal16x16,
|
||||
"clustereddotdiagonal6x6": dither.ClusteredDotDiagonal6x6,
|
||||
"clustereddotdiagonal8x8": dither.ClusteredDotDiagonal8x8,
|
||||
"clustereddotdiagonal8x8_2": dither.ClusteredDotDiagonal8x8_2,
|
||||
"clustereddotdiagonal8x8_3": dither.ClusteredDotDiagonal8x8_3,
|
||||
"clustereddothorizontalline": dither.ClusteredDotHorizontalLine,
|
||||
"clustereddotspiral5x5": dither.ClusteredDotSpiral5x5,
|
||||
"clustereddotverticalline": dither.ClusteredDotVerticalLine,
|
||||
"horizontal3x5": dither.Horizontal3x5,
|
||||
"vertical5x3": dither.Vertical5x3,
|
||||
}
|
||||
|
||||
func (f ditherFilter) Draw(dst draw.Image, src image.Image, options *gift.Options) {
|
||||
gift.New().Draw(dst, f.ditherer.Dither(src))
|
||||
}
|
||||
|
||||
func (f ditherFilter) Bounds(srcBounds image.Rectangle) image.Rectangle {
|
||||
return image.Rect(0, 0, srcBounds.Dx(), srcBounds.Dy())
|
||||
}
|
Reference in New Issue
Block a user