GithubHelp home page GithubHelp logo

gpeg's Introduction

GPEG: JPEG-like compressing algorithm

JPEG based image compression written in Java. My filename extension is .gpeg . The parts are all same as in JPEG except the Huffman coding:

  1. Discrete cosine transformation
  2. Quantization
  3. Huffman coding is done with constructing a trie, not with statistical way as JPEG does.

Source code is in jpeg/src folder.

#Usage

First clone the repository. At the moment, this program requires that both width % 8 = 0 and height % 8 = 0. I'm working with support for all images.

  • Compress .rgb -image
java -jar "/home/username/GPEG/jpeg/dist/jpeg.jar" compress image.rgb image.gpeg height width

  • Show .gpeg image
java -jar "/home/username/GPEG/jpeg/dist/jpeg.jar" show image.gpeg height width
  • Extract .gpeg to .rgb
java -jar "/home/username/GPEG/jpeg/dist/jpeg.jar" extract image.gpeg image.rgb

#Compression rate

  • Black compressed image is 2% of original image.
  • Colorful test image is 36% of original image.

gpeg's People

Contributors

umtti avatar teashark avatar

Watchers

James Cloos avatar  avatar

gpeg's Issues

Koodikatselmointi

Moi,

Kloonasin reposi tänään torstaina 12.2.

Kuvanpakkaus ei aihepiirinä ole itselleni lainkaan tuttu, joten pystyn valitettavasti kommentoimaan työtäsi vain hieman karkeammalla tasolla.

Sitten asiaan: Koodisi on todella selkeää ja nätisti jäsenneltyä. Voisi ehkä olla mielekästä muuttaa muutamat suomea sisältävät muuttujanimetkin englanniksi, niin kokonaisuus olisi koherentimpi. Toiminnallisuuden jakaminen luokkiin hyvä, samaten JavaDoc-kattavuus.

Dokumentaation puolesta täytyy kehua etenkin määrittelydokumenttia, joka kiteytti mielestäni mukavasti alkuperäisen ongelman sekä sen, kuinka olet lähtenyt sitä ratkomaan. Propsit myös selkeistä käyttöohjeista. Tosin voisi olla hyvä mainita, että convert-komennon käyttö vaatii ilmeisesti ImageMagickin.

En ikävä kyllä pystynyt ajamaan ohjelmaasi sillä Decoder-luokan BinaryIn-tyyppistä muuttujaa b ei voitu alustaa ((cannot find symbol) ehkä puuttuva import?) kun yritin ajaa ohjelmaa NetBeansissa, ja valmiiksi paketoitua jar-tiedostoa tai vastaavaa en löytänyt.

  • Sami

Koodikatselmointi 2

Perustuen committiin 67d104abbf9c0e1838d29ca368c2aa0d200edd22 keskiviikkona 25 helmikuuta kello 16:30.

Koodikatselmointi 2

Yleistä

Toteutusdokumentaatio ja määrittelydokumentaatio on toteutettu mallikkaasti. Se antaa hyvä kuvan ohjelmasi toiminnasta.
Myös testausdokumentaatio oli siististi ja simppelisti toteutettu. Hyvää työtä.

Ohjelman pystyy kääntämään, mutta miinuksena se, että ilman parametrejä ajettaessa ohjelma kaatuu ArrayIndexOutOfBoundsException:iin. Suosittelisin nappaamaan sen try-catch blokilla ja tulostamaan sovelluksen käyttöohjeet jos se ajetaan ilman parametrjä. Lisäksi main-metodi heittää IOExceptionin, mutta kukaan ei ota sitä vastaan.

JavaDoc

Javadocin generointi aiheuttaa monta warning viestiä virheellisen dokumentaatio johdosta. Nämä olisi hyvä siistiä. Lisäksi itse dokumentaatio on paikkapaikoin epäselvää kuten esimerkiksi luokassa SuorituskykyTestit metodille mustatPieni() on annettu teksti "Musta pieni kuva.", joka ei kuvaa mitä metodi oikeastaan tekee. Toisaalta taas luokassa Transformer metodissa DCT() on kuvattu hyvin (ja englanniksi, kielenvaihto sekoittaa) mitä metodi oikeastaan tekee lauseella "Do discrete cosine transformation for 8*8px unit
". Tiedostoissa on myös jäänyt Netbeanssin lisäämä oletus license-header päälle - kannattanee poistaa.

Testit

Testejä on heikonlaisesti ja ne pitää suorittaa suoraan ajamalla Testi.java -tiedosto (projektin "Test" ei toimi koska testi-tiedosto on nimetty väärin).

Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,311 sec

Testit menevät kuitenkin kaikki läpi.

Koodi

Paikoittain häiritsee suomen ja englannin kielen vaihtelu tiedostosta toiseen.

Koodi on kompaktia ja sujuvaa, mutta nimeäminen on hiukan hukassa. Ulkopuoliselle lukijalle muuttuja kuten "c" ja "n" eivät kerro mitään (luokassa Transformer). Lisäksi DCT voitaisiin mahdollisesti kirjoittaa suoraan discreteCosineTransformation, vaikka se on pitkä, niin se on hyvin kuvaava.

Tosin int x ja int y ja vastaavat voidaan jättää sikseen, koska ne ovat yleisesti tunnistettavia merkkejä.

Yhteenveto

Yleisesti ottaen loistavaa työtä, viimeisen viikon refaktoroinnin jälkeen sinulla on kasassa hyvä työ!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.