GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - pixiv/go-libjpeg: An implementation of Go binding for libjpeg (or libjpeg-turbo).

BranchesTags
Open more actions menu

Latest commit

 

History

118 Commits
118 Commits

Folders and files

NameName
Last commit message
Last commit date
example/decoder
example/decoder
 
 
jpeg
jpeg
 
 
rgb
rgb
 
 
test
test
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
travis-install-libjpeg-turbo.sh
travis-install-libjpeg-turbo.sh
 
 

Repository files navigation

go-libjpeg

GoDoc Build Status

An implementation of Go binding for LibJpeg (preferably libjpeg-turbo).

The core codes are picked from go-thumber and rewritten to compatible with image.Image interface.

Usage

import "github.com/pixiv/go-libjpeg/jpeg"

func main() {
    // Decoding JPEG into image.Image
    io, err := os.Open("in.jpg")
    if err != nil {
        log.Fatal(err)
    }
    img, err := jpeg.Decode(io, &jpeg.DecoderOptions{})
    if err != nil {
        log.Fatalf("Decode returns error: %v\n", err)
    }

    // Encode JPEG
    f, err := os.Create("out.jpg")
    if err != nil {
        panic(err)
    }
    w := bufio.NewWriter(f)
    if err := jpeg.Encode(w, img, &jpeg.EncoderOptions{Quality: 90}); err != nil {
        log.Printf("Encode returns error: %v\n", err)
        return
    }
    w.Flush()
    f.Close()
}

See test code to read full features.

Features

  • Raw JPEG decoding in YCbCr color.
  • Decoding with color conversion into RGB/RGBA (RGBA conversion is only supported with libjpeg-turbo).
  • Scaled decoding.
  • Encoding from some color models (YCbCr, RGB and RGBA).

Benchmark

$ go test -bench . -benchtime 10s
...
BenchmarkDecode                     1000          26345730 ns/op
BenchmarkDecodeIntoRGB               500          30886383 ns/op
BenchmarkDecodeWithNativeJPEG        300          49815928 ns/op
...

With libjpeg-turbo:

BenchmarkDecode                     2000           9557646 ns/op
BenchmarkDecodeIntoRGB              1000          12676414 ns/op
BenchmarkDecodeWithNativeJPEG        300          45836153 ns/op

go-libjpeg is about 1.9x faster than image/jpeg. With libjpeg-turbo, it can make more faster (about 4.8x faster than image/jpeg).

Dependencies

  • Go 1.6 or later.

  • libjpeg (preferably libjpeg-turbo)

    DecodeIntoRGBA can only work if go-libjpeg is built with libjpeg-turbo. Because DecdeIntoRGBA uses JCS_ALPHA_EXTENSIONS. You can use DecodeIntoRGB and convert to image.RGBA if can not use libjpeg-turbo.

License

Copyright (c) 2014 pixiv Inc. All rights reserved.

See LICENSE.

About

An implementation of Go binding for libjpeg (or libjpeg-turbo).

Resources

Readme
BSD-3-Clause license
Activity
Custom properties

Stars

170 stars

Watchers

95 watching

Forks

50 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.