02 февруари 2005 г.

графичните

Тегло и оптимизация. Обясняваме как да изчислим теглото на графичен файл, както и как да намалим размера в байтове на графичен файл. Примери за техники, използвани за оптимизиране на теглото на изображенията.

В тази статия ще разгледаме няколко основни аспекта, които трябва да вземем предвид при работа с графични файлове като цяло и по-специално с растерни изображения. Става въпрос за контролиране на теглото на файловете, така че те да заемат по-малко място и следователно да бъдат прехвърлени по-бързо.

Това е въпрос от жизненоважно значение в мрежата и в DesarrolloWeb.com сме разглеждали този проблем няколко пъти. В това ръководство за уеб дизайн ще го намерите от по-теоретичен подход, но с основни познания за всички, които са посветени на уеб дизайна.

Ще започнем, като говорим за теглото на файловете и след това ще видим по какви начини те могат да бъдат оптимизирани.

Тегло на графичните файлове

Растерните изображения могат да бъдат дефинирани в променлив брой цветове. Като общо правило, колкото повече цветове има изображението, толкова по-високо качество ще има, въпреки че това правило зависи много от самото изображение.

Например, черна буква на бял фон (1 битова дълбочина на цвета), съставена от прави хоризонтални и вертикални линии, ще се нуждае само от тези два цвята, за да се покаже правилно, дори ако увеличим техния размер (резолюция).

Ако работим с дълбочина на цвета 8 бита, ще имаме 256 възможни цвята за всеки пиксел (в случай на икони или илюстрации в GIF формат, например) и ако увеличим дълбочината до 24 бита, ще имаме милиони цветове за всеки пиксел на изображението (например за снимки в JPG или PNG формат).

Също така можем да дефинираме различни разделителни способности за изображение. Колкото по-висока е разделителната способност, толкова повече пиксели ще образува изображението, толкова повече информационни данни ще му трябват и следователно, толкова по-голям е размерът на получения файл.

Следователно, колкото повече цветове има изображението и колкото по-висока е неговата разделителна способност, толкова по-голямо е теглото на файла, необходимо за неговото съхраняване.

В горната формула ширината и височината са дадени в инчове, разделителната способност в пиксели на инч и дълбочината на цвета в байтове.

За изображение от 3 x 2 инча с резолюция 72 dpi и с дълбочина на цвета 8 бита, например, ще имаме:

Размер на файла = [[(3 x 72) x (2 x 72)] x 8]/8 = 31104 байта = 31 Kb

Ако размерите на изображението са в сантиметри, просто ги разделете на 2,54. По този начин 1 x 1-инчово изображение с разделителна способност 300 dpi и с дълбочина на цвета 24 бита (истински цвят) ще има тегло от: съдържа общо 90 000 пиксела.

Размер на файла = [[(1 x 300)/2,54 x (1 x 300)/2,54] x 24]/8 = 41850 байта = 419 Kb

Ако работим директно с пиксели (например заснемане с цифров фотоапарат), ще бъде достатъчно да умножим размерите на изображението помежду си и по дълбочината на цвета в битове, за да определим количеството битове, присъстващи във файл с изображение, и разделяйки резултата между 8, ще имаме теглото на файла в байтове.

Както виждаме, получените тегла са много високи, особено в случай на изображения, предназначени за Интернет, където честотната лента е ограничен ресурс.

Оптимизация на графични файлове

По принцип файловете с растерни изображения трябва да съхраняват много графична информация, което прави крайното им тегло в байтове прекомерно, както за печат (ако изображението е много голямо, процесът на печат може да отнеме много време), така и за неговото прехвърляне през Интернет, среда, в която честотната лента е много ограничена.

За да се сведе до минимум теглото на графичните файлове, са разработени различни техники за оптимизация, базирани на два различни принципа:

  • Намалете броя на цветовете, използвани в изображението.
  • Компресирайте данните на изображението, за да заемете по-малко място.

Намаляване на цвета (дитеринг)

Принципът на затъмняване се основава на намаляване на броя на цветовете, използвани в изображението, като се има предвид, че в повечето случаи се използва твърде много графична информация във файл, информация, която може да бъде елиминирана без значителни загуби в крайното качество на изображението.

Ако дадено изображение използва само 40 цвята, за да се намали размерът на файла му би било достатъчно да се дефинират 40 цвята с помощта на цветна палитра, след което точките на изображението да се запазят с дълбочина 8 бита.

От друга страна, изображение, което използва 256 цвята, може да има приемливо качество по отношение на същото изображение с 16,8 милиона цвята, което е три пъти по-малко по размер. За да получите цвят, който не присъства в 256-цветната палитра на изображението, винаги е възможно да смесите тези, които са, постигайки в повечето случаи добро сближаване с необходимото.

Техниката на дитериране ще отговаря за изчисляването на пропорцията, с която цветовете на палитрата трябва да се смесват, за да се получат други.

За да се получи определен цветен тон, се използват няколко точки, които имат цвят, много близък до този, който желаете да постигнете. Когато гледате изображението от определено разстояние, цветът на съседните точки се смесва, пораждайки илюзията за нови цветови нюанси.

Тази система за оптимизация за намаляване на цветовете се използва например във формат GIF.

Намаляване на данните (компресия)

Компресията е техника, която позволява намаляване на размера на файл чрез математически процеси, като по този начин улеснява тяхното прехвърляне по мрежата или съхранението им на който и да е друг носител.

Всички техники за компресиране намаляват двоичния кодов низ на некомпресирано изображение до математическа съкратена форма, базирана на сложни алгоритми, базирана на теорията, че в изображението има повтаряща се информация, която наистина трябва да бъде запазена само веднъж.

Математическите алгоритми, които компютърът използва за генериране на компресията, са много разнообразни, а някои са наистина сложни. Някои са валидни за всички видове изображения, а други са ефективни само с един тип от тях.

Има два основни типа алгоритми за компресия, тези, които са без загуби и тези, които компресират при загуба.

Системите без загуби съкращават двоичен код, без да изхвърлят информация, така че изходните данни за декодиране са битово идентични с оригиналния източник. Постигнатите коефициенти на компресия са малки, по-малко от 10: 1 в най-добрия случай и определен коефициент на компресия не може да бъде гарантиран, тъй като зависи от количеството излишък на оригиналната информация. Тези системи често се използват за битоново сканиране на текстови материали.

Загубените системи използват различни начини за компенсиране или изхвърляне на по-малко важната информация в изображение въз основа на човешкото зрително възприятие, като понякога постигат резултати, които са почти идентични с оригинала с много по-малко тегло. Качеството на изображението зависи не само от фактора на компресия, но и от използвания алгоритъм. Факторите на компресия са високи, от 40: 1 до 100: 1

Често се използва с тонални изображения, особено изображения с непрекъснат тон, където простото съкращение на информацията, предоставена от системи без загуби, не води до значителни спестявания на файлове.

Съществува разновидност на системите за компресиране, нововъзникващи системи, които предлагат възможността да предоставят изображения с множество разделителни способности от един файл, с последваща гъвкавост при доставяне и представяне на изображенията на крайните потребители.

Основните алгоритми за компресиране, използвани в графични файлове, са:

RLE (кодирана дължина на изпълнение)

Това е може би най-простата схема за компресиране без загуби, а също и една от най-неефективните. Тя се основава на замяна на графичната информация на пикселите, които се повтарят от стойността на цвета на един от тях и позицията на всяка от точките, които го използват.

Тази техника е ефективна, когато в графичния файл, който трябва да бъде компресиран, байт се повтаря последователно голям брой пъти. В тези случаи всички едни и същи байтове се заменят с два, първият от които показва броя на повторенията на втория.

Има различни начини за внедряване на RLE, всички те са собственост. Един от тях, най-неефективният, е да се използва знак, често наричан DLE, който служи за индикация, че е настъпило повторение на знак. Друг е използването на "sentinel" символ, с малко, което показва дали следната информация е за повторение или е данни без повторение.

Този метод позволява да се получи високо ниво на компресия в изображения, съдържащи много области от един и същи цвят, без загуба на качество. Проблемът възниква, когато цветовете на изображението са много неравномерни, като в този случай можете да получите файлове, по-големи от оригиналите.

RLE е алгоритъмът, използван в графичните формати BMP и PCX, въпреки че всеки използва различен метод за изпълнение.

Система за компресиране без загуби, която в момента е собственост на компанията Unisys, разработена от математиците Абрахам Лемпел и Якоб Жив през 1977 и 1978 г. и усъвършенствана от Тери Уелч през 1984 г.

Този алгоритъм е създаден с цел всички хора от компанията Compuserve да могат бързо да обменят изображения в графичен формат GIF, независимо от използваната платформа.

LZW е компресор от речников тип, който използва таблица от низове за компресиране, като замества низовете на едни и същи символи във файла с уникални цифрови кодове, които ги представляват, като по този начин може да ги компресира, дори ако те не са намерени последователно. В компресирания файл таблицата с низове не се появява изрично, а само таблицата с отделни символи и наборът от всички генерирани кодове. По този начин се постигат максимални нива на компресия от 2: 1

Тази система се препоръчва за компресиране на файлове, които съдържат много повтарящи се данни, като прости, монохромни изображения или които съдържат големи цветни области, като се използват във форматите TIFF, GIF и JPG-LS, както и в езикови файлове на PostScript.

JBIG (Съвместна група от експерти на две нива Image Group)

Много здрава система за компресиране без загуби за двустепенни изображения (черно и бяло), работеща както в последователен, така и в прогресивен режим.

Когато се декодира постепенно кодирано изображение, първоначално е налично изображение с ниска разделителна способност в сравнение с оригинала, изображение, което се увеличава с разделителна способност с декодирането на повече данни.

Прогресивното кодиране има няколко предимства. Първо, една и съща база данни с изображения може да обслужва различни изходни устройства с различна резолюция. Трябва да бъде изпратена и декодирана само тази информация в компресирания файл с изображения, която позволява възстановяване до разделителната способност на конкретното изходно устройство. Второ, позволява бързо предаване и показване на изображение с ниска разделителна способност с желаното подобрение на разделителната способност. Трето, той позволява на потребителя бързо да разпознае изображението, което позволява на потребителя да прекъсне предаването на нежелано изображение.

Тази система се използва в графичния формат TIFF и не се поддържа от нито един текущ уеб браузър.

JPEG (Съвместна експертна група за снимки)

Силно усъвършенствана система за компресиране със загуби, базирана на изследвания на човешкото зрително възприятие, която позволява кодирането на цветни (24-битови) и сиви (8-битови) изображения чрез елиминиране на излишни данни, които не са важни и изглаждане на ръбове и области, които имат подобен цвят.

Това води до загуби, които леко влошават качеството на изображението, но в замяна осигурява високи нива на компресия, регулируеми до крайното качество на изображението, което ще бъде кодирано.

Всъщност JPEG, международен стандарт 10918, описва семейство техники за компресиране, основани на сложни математически операции, като преобразуване на цветен формат, отделно косинусно преобразуване (DCT), квантуване и ентропично кодиране, дефинирайки три различни кодиращи системи:

  • Основна система за кодиране със загуби, която се основава на дискретна косинусна трансформация и е подходяща за повечето приложения за компресия. прецизността на входните и изходните данни е ограничена до 8 бита.
  • Разширена система за кодиране, за по-висока компресия, по-висока точност или прогресивна реконструкция. Използва се главно за осигуряване на бързо частично декодиране на компресирано изображение, така че да може да се определи цялостният външен вид на компресираното изображение, преди да бъде напълно декодирано.
  • Независима система за кодиране без загуби за обратима компресия.

JPEG е симетричен алгоритъм за кодиране (декодирането отнема толкова време, колкото и кодирането), предлагайки нива на компресия 20: 1 или по-високи, което позволява да се извършват определени геометрични трансформации (например завъртане на изображението) директно върху трансформираната матрица, без регенериране на оригинала изображение.

Това е методът на компресия, който най-често се използва днес за компресиране на изображения със загуби и се използва в графични формати JPG, TIFF, FlashPix, в PDF файлове и в езикови файлове на PostScript. Освен това той е в основата на мултимедийния стандарт за движещи се изображения MPEG.

Що се отнася до уеб браузърите, той се поддържа от Internet Explorer 2 и Firefox във всичките му версии. Разбира се и в по-модерни браузъри като Chrome.

Консултант, дизайнер и уеб разработчик в ParaRedeBJS. Специалист по Usabill.