компресиране на снимки с 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 алгоритъм зависи от цветовия спектър на самата картинка...
 
    Абе от честотния спектър зависи, ама... както и да е. :)
 
Така или иначе именно затова говорим за първо приближение и за статистическо изследване на най-често срещаните картинки. А ако трябва да се знае проблизително колко най-голяма може да стане при съответно качество, се взима една картинка, чийто честотен спектър е бял шум и готово. ;)