компресиране на снимки с java
Интересува ме дали някой , знае клас който компресира изображения , като може да се зададе максимален размер на файла.
Т.е имам снимка с големина 1MB искам да я намаля,така че след компресията файла да не е по-голям от 100 кб .
Намерих нещо което върши работа за компресиране, т.е jai http://java.sun.com/products/java-me...rs/jaifaq.html
С това ги компресирам ,но немога да контролирам максималният размер на изходният файл.
Re: компресиране на снимки с java
мисля, до колкото си спомням параметъра за компресията се казваше quality factor и с него се модифицираха таблиците LQT и CQT
дори и това което ползваш би трябва да го има.... би трябва да се намира в INIT на компресията или преди
jpeg_dct_init();
jpeg_quant_init();
разгледай си документацията на класа или юнита....
com.sun.media.jai.codec
Class JPEGEncodeParam
setQuality(float quality)
This creates new quantization tables that replace the currently installed quantization tables.
--------------------------------------------------
setQuality
public void setQuality(float quality)This creates new quantization tables that replace the currently installed quantization tables. The created quantization table varies from very high compression, very low quality, (0.0) to low compression, very high quality (1.0) based on the quality parameter.
At a quality level of 1.0 the table will be all 1's which will lead to no loss of data due to quantization (however chrominace subsampling, if used, and roundoff error in the DCT will still degrade the image some what).
The default setting is 0.75 which provides high quality while insuring a good compression ratio.
Some guidelines: 0.75 high quality
0.5 medium quality
0.25 low quality
Parameters:
quality - 0.0-1.0 setting of desired quality level.
Re: компресиране на снимки с java
Ще добавя само, че при JPEG компесията (а и не само при нея) е невъзможно предварително да се определи точно какъв ще е размера на получения файл. Не знам дали има такива класове, които позволяват да им се подаде параметър за искан размер на полученото компресирано изображеине, но лесно можеш да си го напишеш и сам/сама - компресираш с нещо (например с това, което си намерил/а), гледаш резултата и променяш качеството на компресията до постигане на желания резултат. Малко предварителни емпирични изследвания могат да ти помогнат да изградиш таблица от която да взимаш стойностите за първото приближение. И понеже всичко си има ограничения (не можеш да очакваш 50М да се свият до 100К), може би трябва да включиш и вариант за намаляне на резолюцията на изходната картинка при нужда.
Re: компресиране на снимки с java
Благодаря за отговорите, мисля че ще ми свършат работа.
Само можели да попитам , какво точно се има в предвид с това " предварителни емпирични изследвания могат да ти помогнат да изградиш таблица от която да взимаш стойностите за първото приближение".
За какви точно иследвания става дума?
Re: компресиране на снимки с java
Цитат:
Първоначално публикувано от magda
Благодаря за отговорите, мисля че ще ми свършат работа.
Само можели да попитам , какво точно се има в предвид с това " предварителни емпирични изследвания могат да ти помогнат да изградиш таблица от която да взимаш стойностите за първото приближение".
За какви точно иследвания става дума?
Това ще рече да си поиграеш с няколко картинки и да разбереш намаляването на качеството доколко се отразява на размера. Например 10 картинки от по 1М като им намалиш качеството с 20% се получава размер около 300к, 30% - 200К и т.н. Вмъкваш тази зависимост в алгоритъма и като тръгнеш да правиш от 1М - 200К първо пробваш с 30% от "емпиричния опит" се очаква картинкара да е около 200к ако е повече пробваш пак с 32% и т.н.
Re: компресиране на снимки с java
Това е много много относително и грешката ще бъде много голяма.
Компресията при JPEG и всичко ползващо DCT алгоритъм зависи от цветовия спектър на самата картинка...
ПС: бърза справка - http://en.wikipedia.org/wiki/JPEG
Re: компресиране на снимки с java
Цитат:
Първоначално публикувано от The_Wizard
Това е много много относително и грешката ще бъде много голяма.
Компресията при JPEG и всичко ползващо DCT алгоритъм зависи от цветовия спектър на самата картинка...
Абе от честотния спектър зависи, ама... както и да е. :)
Така или иначе именно затова говорим за първо приближение и за статистическо изследване на най-често срещаните картинки. А ако трябва да се знае проблизително колко най-голяма може да стане при съответно качество, се взима една картинка, чийто честотен спектър е бял шум и готово. ;)