add base64 support
Signed-off-by: s3rj1k <evasive.gyron@gmail.com>
This commit is contained in:
parent
b06ff17030
commit
8ad35e18de
2 changed files with 68 additions and 0 deletions
40
captcha.go
40
captcha.go
|
@ -3,6 +3,7 @@ package captcha
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
"image/draw"
|
"image/draw"
|
||||||
|
@ -91,18 +92,57 @@ func (data *Data) WriteImage(w io.Writer) error {
|
||||||
return png.Encode(w, data.img)
|
return png.Encode(w, data.img)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBase64Image encodes image data as base64 string.
|
||||||
|
// It returns base64 encoded PNG and possible encoding error.
|
||||||
|
func (data *Data) GetBase64Image() (string, error) {
|
||||||
|
var buff bytes.Buffer
|
||||||
|
|
||||||
|
err := png.Encode(&buff, data.img)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return base64.StdEncoding.EncodeToString(buff.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
// WriteJPG encodes image data in JPEG format and writes to an io.Writer.
|
// WriteJPG encodes image data in JPEG format and writes to an io.Writer.
|
||||||
// It returns possible error from JPEG encoding.
|
// It returns possible error from JPEG encoding.
|
||||||
func (data *Data) WriteJPG(w io.Writer, o *jpeg.Options) error {
|
func (data *Data) WriteJPG(w io.Writer, o *jpeg.Options) error {
|
||||||
return jpeg.Encode(w, data.img, o)
|
return jpeg.Encode(w, data.img, o)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBase64JPG encodes image data as base64 string.
|
||||||
|
// It returns base64 encoded JPG and possible encoding error.
|
||||||
|
func (data *Data) GetBase64JPG(o *jpeg.Options) (string, error) {
|
||||||
|
var buff bytes.Buffer
|
||||||
|
|
||||||
|
err := jpeg.Encode(&buff, data.img, o)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return base64.StdEncoding.EncodeToString(buff.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
// WriteGIF encodes image data in GIF format and writes to an io.Writer.
|
// WriteGIF encodes image data in GIF format and writes to an io.Writer.
|
||||||
// It returns possible error from GIF encoding.
|
// It returns possible error from GIF encoding.
|
||||||
func (data *Data) WriteGIF(w io.Writer, o *gif.Options) error {
|
func (data *Data) WriteGIF(w io.Writer, o *gif.Options) error {
|
||||||
return gif.Encode(w, data.img, o)
|
return gif.Encode(w, data.img, o)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBase64GIF encodes image data as base64 string.
|
||||||
|
// It returns base64 encoded GIF and possible encoding error.
|
||||||
|
func (data *Data) GetBase64GIF(o *gif.Options) (string, error) {
|
||||||
|
var buff bytes.Buffer
|
||||||
|
|
||||||
|
err := gif.Encode(&buff, data.img, o)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return base64.StdEncoding.EncodeToString(buff.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ttfFont, _ = freetype.ParseFont(ttf)
|
ttfFont, _ = freetype.ParseFont(ttf)
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,24 @@ func TestSmallCaptcha(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEncode(t *testing.T) {
|
||||||
|
data, err := New(150, 50)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
err = data.WriteImage(buf)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = data.GetBase64Image()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestEncodeJPG(t *testing.T) {
|
func TestEncodeJPG(t *testing.T) {
|
||||||
data, err := New(150, 50)
|
data, err := New(150, 50)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -43,6 +61,11 @@ func TestEncodeJPG(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = data.GetBase64JPG(&jpeg.Options{Quality: 70})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEncodeGIF(t *testing.T) {
|
func TestEncodeGIF(t *testing.T) {
|
||||||
|
@ -55,6 +78,11 @@ func TestEncodeGIF(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = data.GetBase64GIF(new(gif.Options))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewCaptchaOptions(t *testing.T) {
|
func TestNewCaptchaOptions(t *testing.T) {
|
||||||
|
|
Reference in a new issue