{"id":13732032,"url":"https://github.com/google/knusperli","last_synced_at":"2025-05-08T06:31:09.233Z","repository":{"id":30244730,"uuid":"124373164","full_name":"google/knusperli","owner":"google","description":"A deblocking JPEG decoder","archived":false,"fork":false,"pushed_at":"2023-09-10T02:05:58.000Z","size":1624,"stargazers_count":467,"open_issues_count":10,"forks_count":27,"subscribers_count":20,"default_branch":"master","last_synced_at":"2024-08-04T02:10:44.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-08T10:06:34.000Z","updated_at":"2024-05-30T14:17:13.000Z","dependencies_parsed_at":"2022-08-07T15:01:28.700Z","dependency_job_id":null,"html_url":"https://github.com/google/knusperli","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fknusperli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fknusperli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fknusperli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fknusperli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/knusperli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224707602,"owners_count":17356362,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T02:01:44.374Z","updated_at":"2024-11-14T23:30:50.511Z","avatar_url":"https://github.com/google.png","language":"C++","readme":"# Knusperli\n\nThe goal of Knusperli is to reduce blocking artifacts in decoded JPEG images, by\ninterpreting quantized DCT coefficients in the image data as an interval, rather\nthan a fixed value, and choosing the value from that interval that minimizes\ndiscontinuities at block boundaries.\n\na traditional JPEG decoder (Imagemagick 7.0.8-59) | Knusperli\n--------------------------------------------------|-----------------------------------------------\n![baboon JPEG, zoomed][baboon-jpeg-crop]          | ![baboon Knusperli, zoomed][baboon-knus-crop]\n![baboon JPEG][baboon-jpeg]                       | ![baboon Knusperli][baboon-knus]\n\n## Building\n\nKnusperli builds with [Bazel][bazel]:\n\n    CC=gcc bazel build :knusperli\n    bazel-bin/knusperli input.jpg output.png\n\n## Details\n\nA JPEG encoder quantizes DCT coefficients by rounding coefficients to the\nnearest multiple of the elements of the quantization matrix. For every\ncoefficient, there is an interval of values that would round to the same\nmultiple. A traditional decoder uses the center of this interval to reconstruct\nthe image. Knusperli instead chooses the value in the interval that reduces\ndiscontinuities at block boundaries. The coefficients that Knusperli uses, would\nhave rounded to the same values that are stored in the JPEG image.\n\n## Disclaimer\n\nThis is not an officially supported Google product.\n\n[bazel]: https://bazel.build/\n[baboon-jpeg-crop]: doc/img/baboon.q50.jpeg.crop.png\n[baboon-knus-crop]: doc/img/baboon.q50.knusperli.crop.png\n[baboon-jpeg]: doc/img/baboon.q50.jpeg.png\n[baboon-knus]: doc/img/baboon.q50.knusperli.png\n","funding_links":[],"categories":["Graphics"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fknusperli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fknusperli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fknusperli/lists"}