kimg

package module
v0.9.1 Latest Latest
Warning

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

Go to latest
Published: Oct 24, 2022 License: MIT Imports: 29 Imported by: 0

README

kimg

Yet another image server build in go

Build Status

English | 简体中文

Quick Start

run kimg

  • run with linux binary
$ wget -O- https://github.com/zhoukk/kimg/releases/download/v0.7.1/kimg_v0.7.1_linux.tar.gz | tar xf -
$ cd kimg_v0.7.1_linux
$ ./kimg
  • run with docker
$ docker pull zhoukk/kimg:v0.7.1
$ docker run --rm -p 80:80 zhoukk/kimg:v0.7.1

open a browser and have fun

$ open http://localhost

What's in docker image

Usage

Upload a image to kimg

  • Upload use data-binary
  • Upload use multipart-form

Fetch a image with style from kimg

$ open http://localhost/image/323551c4a7e2071a28a41331b98ca821?s=1&sm=fit&sw=300&sh=300&c=1&cw=200&ch=200

Get a image information

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type KimgBaseLogger

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

KimgBaseLogger base logger struct hold golang logger.

func (*KimgBaseLogger) Debug

func (logger *KimgBaseLogger) Debug(format string, v ...interface{})

Debug log

func (*KimgBaseLogger) Error

func (logger *KimgBaseLogger) Error(format string, v ...interface{})

Error log

func (*KimgBaseLogger) Info

func (logger *KimgBaseLogger) Info(format string, v ...interface{})

Info log

func (*KimgBaseLogger) Warn

func (logger *KimgBaseLogger) Warn(format string, v ...interface{})

Warn log

type KimgBaseStorage

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

KimgBaseStorage base storage struct hold kimg context.

func (*KimgBaseStorage) Debug

func (storage *KimgBaseStorage) Debug(format string, v ...interface{})

Debug log

func (*KimgBaseStorage) Error

func (storage *KimgBaseStorage) Error(format string, v ...interface{})

Error log

func (*KimgBaseStorage) Info

func (storage *KimgBaseStorage) Info(format string, v ...interface{})

Info log

func (*KimgBaseStorage) Warn

func (storage *KimgBaseStorage) Warn(format string, v ...interface{})

Warn log

type KimgCache

type KimgCache interface {
	Set(key string, data []byte) error
	Get(key string) ([]byte, error)
	Del(key string) error
}

KimgCache is a interface to provide cache in kimg.

func NewKimgCache

func NewKimgCache(config *KimgConfig) (KimgCache, error)

NewKimgCache create a cache instance according to cache mode in config.

func NewKimgMemcacheCache

func NewKimgMemcacheCache(config *KimgConfig) (KimgCache, error)

NewKimgMemcacheCache create a memcache cache instance.

func NewKimgMemoryCache added in v0.2.0

func NewKimgMemoryCache(config *KimgConfig) (KimgCache, error)

NewKimgMemoryCache create a memory cache instance.

func NewKimgRedisCache

func NewKimgRedisCache(config *KimgConfig) (KimgCache, error)

NewKimgRedisCache create a redis cache instance.

type KimgConfig

type KimgConfig struct {
	Httpd struct {
		Bind      string            `yaml:"bind,omitempty"`
		URL       string            `yaml:"url,omitempty"`
		Headers   map[string]string `yaml:"headers,omitempty"`
		Etag      bool              `yaml:"etag,omitempty"`
		MaxAge    int               `yaml:"maxAge,omitempty"`
		FormName  string            `yaml:"formName,omitempty"`
		MaxSize   int64             `yaml:"maxSize,omitempty"`
		EnableWeb bool              `yaml:"enableWeb,omitempty"`
	} `yaml:"httpd,omitempty"`

	Image struct {
		Format       string   `yaml:"format,omitempty"`
		Quality      int      `yaml:"quality,omitempty"`
		AllowedTypes []string `yaml:"allowedTypes,omitempty"`
	} `yaml:"image,omitempty"`

	Logger struct {
		Mode  string `yaml:"mode,omitempty"`
		Level string `yaml:"level,omitempty"`
		File  string `yaml:"file,omitempty"`
	} `yaml:"logger,omitempty"`

	Cache struct {
		Mode     string `yaml:"mode,omitempty"`
		MaxSize  int    `yaml:"maxSize,omitempty"`
		Memcache struct {
			URL string `yaml:"url,omitempty"`
		} `yaml:"memcache,omitempty"`
		Redis struct {
			URL string `yaml:"url,omitempty"`
		} `yaml:"redis,omitempty"`
		Memory struct {
			Capacity int64 `yaml:"capacity,omitempty"`
		} `yaml:"memory,omitempty"`
	} `yaml:"cache,omitempty"`

	Storage struct {
		Mode    string `yaml:"mode,omitempty"`
		SaveNew bool   `yaml:"saveNew,omitempty"`
		File    struct {
			Root string `yaml:"root,omitempty"`
		} `yaml:"file,omitempty"`
		Minio struct {
			Endpoint        string `yaml:"endpoint,omitempty"`
			AccessKeyID     string `yaml:"accessKeyId,omitempty"`
			SecretAccessKey string `yaml:"secretAccessKey,omitempty"`
			Bucket          string `yaml:"bucket,omitempty"`
			UseSSL          bool   `yaml:"useSSL,omitempty"`
		} `yaml:"minio,omitempty"`
	} `yaml:"storage,omitempty"`

	Watermark struct {
		Enable  bool   `yaml:"enable,omitempty"`
		Gravity string `yaml:"gravity,omitempty"`
		X       int    `yaml:"x,omitempty"`
		Y       int    `yaml:"y,omitempty"`
		Rotate  int    `yaml:"rotate,omitempty"`
		Opacity int    `yaml:"opacity,omitempty"`

		Text struct {
			Content     string `yaml:"content,omitempty"`
			FontName    string `yaml:"fontName,omitempty"`
			FontSize    int    `yaml:"fontSize,omitempty"`
			FontColor   string `yaml:"fontColor,omitempty"`
			StrokeColor string `yaml:"strokeColor,omitempty"`
			StrokeWidth int    `yaml:"strokeWidth,omitempty"`
		} `yaml:"text,omitempty"`

		Logo struct {
			File string `yaml:"file,omitempty"`
			W    int    `yaml:"w,omitempty"`
			H    int    `yaml:"h,omitempty"`
		} `yaml:"logo,omitempty"`
	} `yaml:"watermark,omitempty"`
}

KimgConfig is configuration of kimg.

func NewKimgConfig

func NewKimgConfig(configFile string) (*KimgConfig, error)

NewKimgConfig create a config instance from config file.

type KimgContext

type KimgContext struct {
	Config  *KimgConfig
	Cache   KimgCache
	Logger  KimgLogger
	Storage KimgStorage
	Image   *KimgImagick
}

KimgContext context of kimg.

func NewKimgContext

func NewKimgContext(configFile string) (*KimgContext, error)

NewKimgContext create a instance of kimg context.

func (*KimgContext) DeleteImage

func (ctx *KimgContext) DeleteImage(md5Sum string) error

DeleteImage delete a image from kimg according the md5 key.

func (*KimgContext) GetImage

func (ctx *KimgContext) GetImage(req *KimgRequest) ([]byte, error)

GetImage get a image data from kimg according to a image request.

func (*KimgContext) InfoImage

func (ctx *KimgContext) InfoImage(req *KimgRequest) (*KimgResponse, error)

InfoImage get a image information according the md5 key and make a image response.

func (*KimgContext) Release

func (ctx *KimgContext) Release()

Release release resource in kimg context.

func (*KimgContext) SaveImage

func (ctx *KimgContext) SaveImage(data []byte) (*KimgResponse, error)

SaveImage save a image to kimg and make a kimg response.

func (*KimgContext) ServeHTTP

func (ctx *KimgContext) ServeHTTP(w http.ResponseWriter, r *http.Request)

type KimgImagick

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

KimgImagick image processor struct hold kimg context.

func NewKimgImagick

func NewKimgImagick(ctx *KimgContext) *KimgImagick

NewKimgImagick create a image processor instance and initialize imagick.

func (*KimgImagick) Convert

func (image *KimgImagick) Convert(data []byte, req KimgRequest) ([]byte, error)

Convert convert a image according kimg request and return new image data.

func (*KimgImagick) Info

func (image *KimgImagick) Info(req *KimgRequest, data []byte) (*KimgResponse, error)

Info get a image information and return a kimg response.

func (*KimgImagick) Release

func (image *KimgImagick) Release()

Release terminate imagick.

type KimgLogger

type KimgLogger interface {
	Debug(format string, v ...interface{})
	Info(format string, v ...interface{})
	Warn(format string, v ...interface{})
	Error(format string, v ...interface{})
}

KimgLogger is a interface to provide logger in kimg.

func NewKimgConsoleLogger

func NewKimgConsoleLogger(config *KimgConfig) (KimgLogger, error)

NewKimgConsoleLogger create a console logger instance.

func NewKimgFileLogger

func NewKimgFileLogger(config *KimgConfig) (KimgLogger, error)

NewKimgFileLogger create a file based logger instance.

func NewKimgLogger

func NewKimgLogger(config *KimgConfig) (KimgLogger, error)

NewKimgLogger create a logger instance according to logger mode in config.

type KimgRequest

type KimgRequest struct {
	Md5    string `json:"-"`
	Origin bool   `json:"-"`
	Style  string `json:"-"`
	Save   bool   `json:"-"`

	// scale params
	Scale   bool   `json:"scale,omitempty"`
	ScaleM  string `json:"scale_m,omitempty"`
	ScaleW  int    `json:"scale_w,omitempty"`
	ScaleH  int    `json:"scale_h,omitempty"`
	ScaleWP int    `json:"scale_wp,omitempty"`
	ScaleHP int    `json:"scale_hp,omitempty"`
	ScaleP  int    `json:"scale_p,omitempty"`

	// crop params
	Crop    bool   `json:"crop,omitempty"`
	Gravity string `json:"gravity,omitempty"`
	CropW   int    `json:"crop_w,omitempty"`
	CropH   int    `json:"crop_h,omitempty"`
	Offset  string `json:"offset,omitempty"`
	OffsetX int    `json:"offset_x,omitempty"`
	OffsetY int    `json:"offset_y,omitempty"`

	Format     string `json:"format,omitempty"`
	Quality    int    `json:"quality,omitempty"`
	Rotate     int    `json:"rotate,omitempty"`
	BGColor    string `json:"bg_color,omitempty"`
	Gray       bool   `json:"gray,omitempty"`
	AutoOrient bool   `json:"auto_orient,omitempty"`
	Strip      bool   `json:"strip,omitempty"`
}

KimgRequest define a image request.

func (*KimgRequest) Key

func (req *KimgRequest) Key() string

Key generate a key according to image style request params.

type KimgResponse

type KimgResponse struct {
	Md5         string            `json:"md5"`
	URL         string            `json:"url"`
	Style       string            `json:"style,omitempty"`
	Size        int               `json:"size"`
	Width       int               `json:"width"`
	Height      int               `json:"height"`
	Format      string            `json:"format"`
	Orientation string            `json:"orientation"`
	Exif        map[string]string `json:"exif"`
}

KimgResponse define a image response.

type KimgStorage

type KimgStorage interface {
	Set(req *KimgRequest, data []byte) error
	Get(req *KimgRequest) ([]byte, error)
	Del(req *KimgRequest) error
}

KimgStorage is a interface to provide storage in kimg.

func NewKimgFileStorage

func NewKimgFileStorage(ctx *KimgContext) (KimgStorage, error)

NewKimgFileStorage create a file based storage instance.

func NewKimgMinioStorage added in v0.9.0

func NewKimgMinioStorage(ctx *KimgContext) (KimgStorage, error)

NewKimgMinioStorage create a minio based storage instance.

func NewKimgStorage

func NewKimgStorage(ctx *KimgContext) (KimgStorage, error)

NewKimgStorage create a storage instance according to storage mode in config.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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