Skip to content
Snippets Groups Projects
Commit cdf55cc0 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Improved performance significantly

parent d60abe1f
No related branches found
No related tags found
No related merge requests found
...@@ -19,9 +19,10 @@ func returnResult(config *Config, client *redis.Client, result Result) { ...@@ -19,9 +19,10 @@ func returnResult(config *Config, client *redis.Client, result Result) {
client.Publish(config.ResultChannel, string(raw)) client.Publish(config.ResultChannel, string(raw))
} }
func generateSize(errorChannel chan error, config *Config, image Image, definition SizeDefinition) { func generateSize(errorChannel chan error, wand *imagick.MagickWand, wandLinear *imagick.MagickWand, config *Config, image Image, definition SizeDefinition) {
errorChannel <- resize( errorChannel <- resize(
filepath.Join(config.SourceFolder, image.Id), wand,
wandLinear,
definition.Size, definition.Size,
config.Quality, config.Quality,
filepath.Join(config.TargetFolder, fmt.Sprintf("%s%s", image.Id, definition.Suffix)), filepath.Join(config.TargetFolder, fmt.Sprintf("%s%s", image.Id, definition.Suffix)),
...@@ -37,8 +38,22 @@ func processImage(config *Config, client *redis.Client, value string) { ...@@ -37,8 +38,22 @@ func processImage(config *Config, client *redis.Client, value string) {
errorChannel := make(chan error) errorChannel := make(chan error)
wand := imagick.NewMagickWand()
defer wand.Destroy()
err := wand.ReadImage(filepath.Join(config.SourceFolder, image.Id))
if err != nil {
panic(err)
}
wandLinear := wand.Clone()
err = wandLinear.TransformImageColorspace(imagick.COLORSPACE_RGB)
if err != nil {
panic(err)
}
for _, definition := range config.Sizes { for _, definition := range config.Sizes {
go generateSize(errorChannel, config, image, definition) go generateSize(errorChannel, wand, wandLinear, config, image, definition)
} }
errors := make([]string, 0) errors := make([]string, 0)
......
...@@ -7,16 +7,15 @@ import ( ...@@ -7,16 +7,15 @@ import (
"math" "math"
) )
func resize(source string, size Size, quality Quality, target string) error { func resize(wand *imagick.MagickWand, wandLinear *imagick.MagickWand, size Size, quality Quality, target string) error {
var err error var err error
var mw *imagick.MagickWand
mw := imagick.NewMagickWand()
defer mw.Destroy() defer mw.Destroy()
err = mw.ReadImage(source) if size.Width == 0 && size.Height == 0 {
if err != nil { mw = wand.Clone()
return err } else {
} mw = wandLinear.Clone()
width := mw.GetImageWidth() width := mw.GetImageWidth()
height := mw.GetImageHeight() height := mw.GetImageHeight()
...@@ -69,11 +68,6 @@ func resize(source string, size Size, quality Quality, target string) error { ...@@ -69,11 +68,6 @@ func resize(source string, size Size, quality Quality, target string) error {
} }
if (width != nWidth) || (height != nHeight) { if (width != nWidth) || (height != nHeight) {
err = mw.TransformImageColorspace(imagick.COLORSPACE_RGB)
if err != nil {
return err
}
err = mw.ResizeImage(nWidth, nHeight, imagick.FILTER_LANCZOS, 1) err = mw.ResizeImage(nWidth, nHeight, imagick.FILTER_LANCZOS, 1)
if err != nil { if err != nil {
return err return err
...@@ -84,6 +78,7 @@ func resize(source string, size Size, quality Quality, target string) error { ...@@ -84,6 +78,7 @@ func resize(source string, size Size, quality Quality, target string) error {
return err return err
} }
} }
}
if quality.CompressionQuality != 0 { if quality.CompressionQuality != 0 {
mw.SetImageCompressionQuality(quality.CompressionQuality) mw.SetImageCompressionQuality(quality.CompressionQuality)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment