The JPG File Format and Every About it!

The JPG File Format and Every About it!


JPEG ( JAY-peg)[1] is a commonly used method of lossy compression for digital images, particularly for those images produced by digital photography. The degree of compression can be adjusted, allowing a selectable tradeoff between storage size and image quality. JPEG typically achieves 10:1 compression with little perceptible loss in image quality.[2]

JPEG compression is used in a number of image file formats. JPEG/Exif is the most common image format used by digital cameras and other photographic image capture devices; along with JPEG/JFIF, it is the most common format for storing and transmitting photographic images on the World Wide Web.[3] These format variations are often not distinguished, and are simply called JPEG.

The term “JPEG” is an acronym for the Joint Photographic Experts Group, which created the standard. The MIME media type for JPEG is image/jpeg, except in older Internet Explorer versions, which provides a MIME type of image/pjpeg when uploading JPEG images.[4] JPEG files usually have a filename extension of .jpg or .jpeg.

JPEG/JFIF supports a maximum image size of 65,535×65,535 pixels,[5] hence up to 4 gigapixels for an aspect ratio of 1:1.

The JPEG standard

“JPEG” stands for Joint Photographic Experts Group, the name of the committee that created the JPEG standard and also other still picture coding standards. The “Joint” stood for ISO TC97 WG8 and CCITT SGVIII. In 1987 ISO TC 97 became ISO/IEC JTC1 and in 1992 CCITT became ITU-T. Currently on the JTC1 side JPEG is one of two sub-groups of ISO/IEC Joint Technical Committee 1, Subcommittee 29, Working Group 1 (ISO/IEC JTC 1/SC 29/WG 1) – titled as Coding of still pictures.[6] [7] [8] On the ITU-T side ITU-T SG16 is the respective body. The original JPEG group was organized in 1986,[9] issuing the first JPEG standard in 1992, which was approved in September 1992 as ITU-T Recommendation T.81[10] and in 1994 as ISO/IEC 10918-1.

The JPEG standard specifies the codec, which defines how an image is compressed into a stream of bytes and decompressed back into an image, but not the file format used to contain that stream.[11] The Exif and JFIF standards define the commonly used file formats for interchange of JPEG-compressed images.

JPEG standards are formally named as Information technology – Digital compression and coding of continuous-tone still images. ISO/IEC 10918 consists of the following parts:

Digital compression and coding of continuous-tone still images – Parts[7] [9] [12]
Part ISO/IEC standard ITU-T Rec. First public release date Latest amendment Title Description
Part 1 ISO/IEC 10918-1:1994 T.81 (09/92) Sep 18, 1992 Requirements and guidelines
Part 2 ISO/IEC 10918-2:1995 T.83 (11/94) Nov 11, 1994 Compliance testing rules and checks for software conformance (to Part 1)
Part 3 ISO/IEC 10918-3:1997 T.84 (07/96) Jul 3, 1996 Apr 1, 1999 Extensions set of extensions to improve the Part 1, including the SPIFF file format
Part 4 ISO/IEC 10918-4:1999 T.86 (06/98) Jun 18, 1998 Jun 29, 2012 Registration of JPEG profiles, SPIFF profiles, SPIFF tags, SPIFF colour spaces, APPn markers, SPIFF compression types and Registration Authorities (REGAUT) methods for registering some of the parameters used to extend JPEG
Part 5 ISO/IEC 10918-5:2013 T.871 (05/11) May 14, 2011 JPEG File Interchange Format (JFIF) A popular format which has been the de facto file format for images encoded by the JPEG standard. In 2009, the JPEG Committee formally established an Ad Hoc Group to standardize JFIF as JPEG Part 5.[13]
Part 6 ISO/IEC 10918-6:2013 T.872 (06/12) Jun 2012 Application to printing systems Specifies a subset of features and application tools for the interchange of images encoded according to the ISO/IEC 10918-1 for printing.

Ecma International TR/98 specifies the JPEG File Interchange Format (JFIF); the first edition was published in June 2009.[14]

Typical usage

The JPEG compression algorithm is at its best on photographs and paintings of realistic scenes with smooth variations of tone and color. For web usage, where the amount of data used for an image is important, JPEG is very popular. JPEG/Exif is also the most common format saved by digital cameras.

On the other hand, JPEG may not be as well suited for line drawings and other textual or iconic graphics, where the sharp contrasts between adjacent pixels can cause noticeable artifacts. Such images may be better saved in a lossless graphics format such as TIFF, GIF, PNG, or a raw image format. The JPEG standard actually includes a lossless coding mode, but that mode is not supported in most products.

As the typical use of JPEG is a lossy compression method, which somewhat reduces the image fidelity, it should not be used in scenarios where the exact reproduction of the data is required (such as some scientific and medical imaging applications and certain technical image processing work).

JPEG is also not well suited to files that will undergo multiple edits, as some image quality will usually be lost each time the image is decompressed and recompressed, particularly if the image is cropped or shifted, or if encoding parameters are changed – see digital generation loss for details. To avoid this, an image that is being modified or may be modified in the future can be saved in a lossless format, with a copy exported as JPEG for distribution.

JPEG compression

JPEG uses a lossy form of compression based on the discrete cosine transform (DCT). This mathematical operation converts each frame/field of the video source from the spatial (2D) domain into the frequency domain (a.k.a. transform domain). A perceptual model based loosely on the human psychovisual system discards high-frequency information, i.e. sharp transitions in intensity, and color hue. In the transform domain, the process of reducing information is called quantization. In simpler terms, quantization is a method for optimally reducing a large number scale (with different occurrences of each number) into a smaller one, and the transform-domain is a convenient representation of the image because the high-frequency coefficients, which contribute less to the overall picture than other coefficients, are characteristically small-values with high compressibility. The quantized coefficients are then sequenced and losslessly packed into the output bitstream. Nearly all software implementations of JPEG permit user control over the compression-ratio (as well as other optional parameters), allowing the user to trade off picture-quality for smaller file size. In embedded applications (such as miniDV, which uses a similar DCT-compression scheme), the parameters are pre-selected and fixed for the application.

The compression method is usually lossy, meaning that some original image information is lost and cannot be restored, possibly affecting image quality. There is an optional lossless mode defined in the JPEG standard. However, this mode is not widely supported in products.

There is also an interlaced progressive JPEG format, in which data is compressed in multiple passes of progressively higher detail. This is ideal for large images that will be displayed while downloading over a slow connection, allowing a reasonable preview after receiving only a portion of the data. However, support for progressive JPEGs is not universal. When progressive JPEGs are received by programs that do not support them (such as versions of Internet Explorer before Windows 7)[15] the software displays the image only after it has been completely downloaded.

There are also many medical imaging and traffic systems that create and process 12-bit JPEG images, normally grayscale images. The 12-bit JPEG format has been part of the JPEG specification for some time, but this format is not as widely supported.

Lossless editing

A number of alterations to a JPEG image can be performed losslessly (that is, without recompression and the associated quality loss) as long as the image size is a multiple of 1 MCU block (Minimum Coded Unit) (usually 16 pixels in both directions, for 4:2:0 chroma subsampling). Utilities that implement this include jpegtran, with user interface Jpegcrop, and the JPG_TRANSFORM plugin to IrfanView.

Blocks can be rotated in 90-degree increments, flipped in the horizontal, vertical and diagonal axes and moved about in the image. Not all blocks from the original image need to be used in the modified one.

The top and left edge of a JPEG image must lie on an 8 × 8 pixel block boundary, but the bottom and right edge need not do so. This limits the possible lossless crop operations, and also prevents flips and rotations of an image whose bottom or right edge does not lie on a block boundary for all channels (because the edge would end up on top or left, where – as aforementioned – a block boundary is obligatory).

Rotations where the image is not a multiple of 8 or 16, which value depends upon the chroma subsampling, are not lossless. Rotating such an image causes the blocks to be recomputed which results in loss of quality.[16]

When using lossless cropping, if the bottom or right side of the crop region is not on a block boundary then the rest of the data from the partially used blocks will still be present in the cropped file and can be recovered. It is also possible to transform between baseline and progressive formats without any loss of quality, since the only difference is the order in which the coefficients are placed in the file.

Furthermore, several JPEG images can be losslessly joined together, as long as they were saved with the same quality and the edges coincide with block boundaries.

JPEG files

The file format known as “JPEG Interchange Format” (JIF) is specified in Annex B of the standard. However, this “pure” file format is rarely used, primarily because of the difficulty of programming encoders and decoders that fully implement all aspects of the standard and because of certain shortcomings of the standard:

  • Color space definition
  • Component sub-sampling registration
  • Pixel aspect ratio definition.

Several additional standards have evolved to address these issues. The first of these, released in 1992, was JPEG File Interchange Format (or JFIF), followed in recent years by Exchangeable image file format (Exif) and ICC color profiles. Both of these formats use the actual JIF byte layout, consisting of different markers, but in addition employ one of the JIF standard’s extension points, namely the application markers: JFIF uses APP0, while Exif uses APP1. Within these segments of the file, that were left for future use in the JIF standard and aren’t read by it, these standards add specific metadata.

Thus, in some ways JFIF is a cutdown version of the JIF standard in that it specifies certain constraints (such as not allowing all the different encoding modes), while in other ways it is an extension of JIF due to the added metadata. The documentation for the original JFIF standard states:[17]

Image files that employ JPEG compression are commonly called “JPEG files”, and are stored in variants of the JIF image format. Most image capture devices (such as digital cameras) that output JPEG are actually creating files in the Exif format, the format that the camera industry has standardized on for metadata interchange. On the other hand, since the Exif standard does not allow color profiles, most image editing software stores JPEG in JFIF format, and also include the APP1 segment from the Exif file to include the metadata in an almost-compliant way; the JFIF standard is interpreted somewhat flexibly.[18]

Strictly speaking, the JFIF and Exif standards are incompatible because each specifies that its marker segment (APP0 or APP1, respectively) appear first. In practice, most JPEG files contain a JFIF marker segment that precedes the Exif header. This allows older readers to correctly handle the older format JFIF segment, while newer readers also decode the following Exif segment, being less strict about requiring it to appear first.

JPEG filename extensions

The most common filename extensions for files employing JPEG compression are .jpg and .jpeg, though .jpe, .jfif and .jif are also used. It is also possible for JPEG data to be embedded in other file types – TIFF encoded files often embed a JPEG image as a thumbnail of the main image; and MP3 files can contain a JPEG of cover art, in the ID3v2 tag.

Color profile

Many JPEG files embed an ICC color profile (color space). Commonly used color profiles include sRGB and Adobe RGB. Because these color spaces use a non-linear transformation, the dynamic range of an 8-bit JPEG file is about 11 stops; see gamma curve.

Syntax and structure

A JPEG image consists of a sequence of segments, each beginning with a marker, each of which begins with a 0xFF byte followed by a byte indicating what kind of marker it is. Some markers consist of just those two bytes; others are followed by two bytes (high then low) indicating the length of marker-specific payload data that follows. (The length includes the two bytes for the length, but not the two bytes for the marker.) Some markers are followed by entropy-coded data; the length of such a marker does not include the entropy-coded data. Note that consecutive 0xFF bytes are used as fill bytes for padding purposes, although this fill byte padding should only ever take place for markers immediately following entropy-coded scan data (see JPEG specification section B.1.1.2 and E.1.2 for details; specifically “In all cases where markers are appended after the compressed data, optional 0xFF fill bytes may precede the marker”).

Within the entropy-coded data, after any 0xFF byte, a 0x00 byte is inserted by the encoder before the next byte, so that there does not appear to be a marker where none is intended, preventing framing errors. Decoders must skip this 0x00 byte. This technique, called byte stuffing (see JPEG specification section F.1.2.3), is only applied to the entropy-coded data, not to marker payload data. Note however that entropy-coded data has a few markers of its own; specifically the Reset markers (0xD0 through 0xD7), which are used to isolate independent chunks of entropy-coded data to allow parallel decoding, and encoders are free to insert these Reset markers at regular intervals (although not all encoders do this).

Common JPEG markers[19]
Short name Bytes Payload Name Comments
SOI 0xFF, 0xD8 none Start Of Image
SOF0 0xFF, 0xC0 variable size Start Of Frame (baseline DCT) Indicates that this is a baseline DCT-based JPEG, and specifies the width, height, number of components, and component subsampling (e.g., 4:2:0).
SOF2 0xFF, 0xC2 variable size Start Of Frame (progressive DCT) Indicates that this is a progressive DCT-based JPEG, and specifies the width, height, number of components, and component subsampling (e.g., 4:2:0).
DHT 0xFF, 0xC4 variable size Define Huffman Table(s) Specifies one or more Huffman tables.
DQT 0xFF, 0xDB variable size Define Quantization Table(s) Specifies one or more quantization tables.
DRI 0xFF, 0xDD 4 bytes Define Restart Interval Specifies the interval between RSTn markers, in Minimum Coded Units (MCUs). This marker is followed by two bytes indicating the fixed size so it can be treated like any other variable size segment.
SOS 0xFF, 0xDA variable size Start Of Scan Begins a top-to-bottom scan of the image. In baseline DCT JPEG images, there is generally a single scan. Progressive DCT JPEG images usually contain multiple scans. This marker specifies which slice of data it will contain, and is immediately followed by entropy-coded data.
RSTn 0xFF, 0xDn (n=0..7) none Restart Inserted every r macroblocks, where r is the restart interval set by a DRI marker. Not used if there was no DRI marker. The low three bits of the marker code cycle in value from 0 to 7.
APPn 0xFF, 0xEn variable size Application-specific For example, an Exif JPEG file uses an APP1 marker to store metadata, laid out in a structure based closely on TIFF.
COM 0xFF, 0xFE variable size Comment Contains a text comment.
EOI 0xFF, 0xD9 none End Of Image

There are other Start Of Frame markers that introduce other kinds of JPEG encodings.

Since several vendors might use the same APPn marker type, application-specific markers often begin with a standard or vendor name (e.g., “Exif” or “Adobe”) or some other identifying string.

At a restart marker, block-to-block predictor variables are reset, and the bitstream is synchronized to a byte boundary. Restart markers provide means for recovery after bitstream error, such as transmission over an unreliable network or file corruption. Since the runs of macroblocks between restart markers may be independently decoded, these runs may be decoded in parallel.

JPEG codec example

Although a JPEG file can be encoded in various ways, most commonly it is done with JFIF encoding. The encoding process consists of several steps:

  1. The representation of the colors in the image is converted from RGB to Y?CC, consisting of one luma component (Y’), representing brightness, and two chroma components, (C and C), representing color. This step is sometimes skipped.
  2. The resolution of the chroma data is reduced, usually by a factor of 2 or 3. This reflects the fact that the eye is less sensitive to fine color details than to fine brightness details.
  3. The image is split into blocks of 8×8 pixels, and for each block, each of the Y, C, and C data undergoes the discrete cosine transform (DCT), which was developed in 1974 by N. Ahmed, T. Natarajan and K. R. Rao; see Citation 1 in discrete cosine transform. A DCT is similar to a Fourier transform in the sense that it produces a kind of spatial frequency spectrum.
  4. The amplitudes of the frequency components are quantized. Human vision is much more sensitive to small variations in color or brightness over large areas than to the strength of high-frequency brightness variations. Therefore, the magnitudes of the high-frequency components are stored with a lower accuracy than the low-frequency components. The quality setting of the encoder (for example 50 or 95 on a scale of 0–100 in the Independent JPEG Group’s library[20] ) affects to what extent the resolution of each frequency component is reduced. If an excessively low quality setting is used, the high-frequency components are discarded altogether.
  5. The resulting data for all 8×8 blocks is further compressed with a lossless algorithm, a variant of Huffman encoding.

The decoding process reverses these steps, except the quantization because it is irreversible. In the remainder of this section, the encoding and decoding processes are described in more detail.


Many of the options in the JPEG standard are not commonly used, and as mentioned above, most image software uses the simpler JFIF format when creating a JPEG file, which among other things specifies the encoding method. Here is a brief description of one of the more common methods of encoding when applied to an input that has 24 bits per pixel (eight each of red, green, and blue). This particular option is a lossy data compression method.

Color space transformation

First, the image should be converted from RGB into a different color space called Y?CC (or, informally, YCbCr). It has three components Y’, C and C: the Y’ component represents the brightness of a pixel, and the C and C components represent the chrominance (split into blue and red components). This is basically the same color space as used by digital color television as well as digital video including video DVDs, and is similar to the way color is represented in analog PAL video and MAC (but not by analog NTSC, which uses the YIQ color space). The Y?CC color space conversion allows greater compression without a significant effect on perceptual image quality (or greater perceptual image quality for the same compression). The compression is more efficient because the brightness information, which is more important to the eventual perceptual quality of the image, is confined to a single channel. This more closely corresponds to the perception of color in the human visual system. The color transformation also improves compression by statistical decorrelation.

A particular conversion to Y?CC is specified in the JFIF standard, and should be performed for the resulting JPEG file to have maximum compatibility. However, some JPEG implementations in “highest quality” mode do not apply this step and instead keep the color information in the RGB color model, where the image is stored in separate channels for red, green and blue brightness components. This results in less efficient compression, and would not likely be used when file size is especially important.


Due to the densities of color- and brightness-sensitive receptors in the human eye, humans can see considerably more fine detail in the brightness of an image (the Y’ component) than in the hue and color saturation of an image (the Cb and Cr components). Using this knowledge, encoders can be designed to compress images more efficiently.

The transformation into the Y?CC color model enables the next usual step, which is to reduce the spatial resolution of the Cb and Cr components (called “downsampling” or “chroma subsampling“). The ratios at which the downsampling is ordinarily done for JPEG images are 4:4:4 (no downsampling), 4:2:2 (reduction by a factor of 2 in the horizontal direction), or (most commonly) 4:2:0 (reduction by a factor of 2 in both the horizontal and vertical directions). For the rest of the compression process, Y’, Cb and Cr are processed separately and in a very similar manner.

Block splitting

After subsampling, each channel must be split into 8×8 blocks. Depending on chroma subsampling, this yields Minimum Coded Unit (MCU) blocks of size 8×8 (4:4:4 – no subsampling), 16×8 (4:2:2), or most commonly 16×16 (4:2:0). In video compression MCUs are called macroblocks.

If the data for a channel does not represent an integer number of blocks then the encoder must fill the remaining area of the incomplete blocks with some form of dummy data. Filling the edges with a fixed color (for example, black) can create ringing artifacts along the visible part of the border; repeating the edge pixels is a common technique that reduces (but does not necessarily completely eliminate) such artifacts, and more sophisticated border filling techniques can also be applied.

Discrete cosine transform

The 8×8 sub-image shown in 8-bit grayscale

Next, each 8×8 block of each component (Y, Cb, Cr) is converted to a frequency-domain representation, using a normalized, two-dimensional type-II discrete cosine transform (DCT), which was introduced by N. Ahmed, T. Natarajan and K. R. Rao in 1974; see Citation 1 in discrete cosine transform. The DCT is sometimes referred to as “type-II DCT” in the context of a family of transforms as in discrete cosine transform, and the corresponding inverse (IDCT) is denoted as “type-III DCT”.

As an example, one such 8×8 8-bit subimage might be:

Before computing the DCT of the 8×8 block, its values are shifted from a positive range to one centered on zero. For an 8-bit image, each entry in the original block falls in the range [ 0 , 255 ] {\displaystyle [0,255]} [0,255]. The midpoint of the range (in this case, the value 128) is subtracted from each entry to produce a data range that is centered on zero, so that the modified range is [ ? 128 , 127 ] {\displaystyle [-128,127]} [-128,127]. This step reduces the dynamic range requirements in the DCT processing stage that follows. (Aside from the difference in dynamic range within the DCT stage, this step is mathematically equivalent to subtracting 1024 from the DC coefficient after performing the transform – which may be a better way to perform the operation on some architectures since it involves performing only one subtraction rather than 64 of them.)

This step results in the following values:

The next step is to take the two-dimensional DCT, which is given by:

The DCT transforms an 8×8 block of input values to a linear combination of these 64 patterns. The patterns are referred to as the two-dimensional DCT basis functions, and the output values are referred to as transform coefficients. The horizontal index is u {\displaystyle u} u and the vertical index is v {\displaystyle v} v.


  •   u {\displaystyle \ u} \ u is the horizontal spatial frequency, for the integers   0 ? u 8 {\displaystyle \ 0\leq u8} \ 0\leq u<8.
  •   v {\displaystyle \ v} \ v is the vertical spatial frequency, for the integers   0 ? v 8 {\displaystyle \ 0\leq v8} \ 0\leq v<8.
  • ? ( u ) = { 1 2 , if  u = 0 1 , otherwise {\displaystyle \alpha (u)={\begin{cases}{\frac {1}{\sqrt {2}}},&{\mbox{if }}u=0\\1,&{\mbox{otherwise}}\end{cases}}} \alpha (u)={\begin{cases}{\frac {1}{\sqrt {2}}},&{\mbox{if }}u=0\\1,&{\mbox{otherwise}}\end{cases}} is a normalizing scale factor to make the transformation orthonormal
  •   g x , y {\displaystyle \ g_{x,y}} \ g_{x,y} is the pixel value at coordinates   ( x , y ) {\displaystyle \ (x,y)} \ (x,y)
  •   G u , v {\displaystyle \ G_{u,v}} \ G_{u,v} is the DCT coefficient at coordinates   ( u , v ) . {\displaystyle \ (u,v).} \ (u,v).

If we perform this transformation on our matrix above, we get the following (rounded to the nearest two digits beyond the decimal point):

Note the top-left corner entry with the rather large magnitude. This is the DC coefficient (also called the constant component), which defines the basic hue for the entire block. The remaining 63 coefficients are the AC coefficients (also called the alternating components).[21] The advantage of the DCT is its tendency to aggregate most of the signal in one corner of the result, as may be seen above. The quantization step to follow accentuates this effect while simultaneously reducing the overall size of the DCT coefficients, resulting in a signal that is easy to compress efficiently in the entropy stage.

The DCT temporarily increases the bit-depth of the data, since the DCT coefficients of an 8-bit/component image take up to 11 or more bits (depending on fidelity of the DCT calculation) to store. This may force the codec to temporarily use 16-bit numbers to hold these coefficients, doubling the size of the image representation at this point; these values are typically reduced back to 8-bit values by the quantization step. The temporary increase in size at this stage is not a performance concern for most JPEG implementations, since typically only a very small part of the image is stored in full DCT form at any given time during the image encoding or decoding process.


The human eye is good at seeing small differences in brightness over a relatively large area, but not so good at distinguishing the exact strength of a high frequency brightness variation. This allows one to greatly reduce the amount of information in the high frequency components. This is done by simply dividing each component in the frequency domain by a constant for that component, and then rounding to the nearest integer. This rounding operation is the only lossy operation in the whole process (other than chroma subsampling) if the DCT computation is performed with sufficiently high precision. As a result of this, it is typically the case that many of the higher frequency components are rounded to zero, and many of the rest become small positive or negative numbers, which take many fewer bits to represent.

The elements in the quantization matrix control the compression ratio, with larger values producing greater compression. A typical quantization matrix (for a quality of 50% as specified in the original JPEG Standard), is as follows:

The quantized DCT coefficients are computed with

where G {\displaystyle G} G is the unquantized DCT coefficients; Q {\displaystyle Q} Q is the quantization matrix above; and B {\displaystyle B} B is the quantized DCT coefficients.

Using this quantization matrix with the DCT coefficient matrix from above results in:

Left: a final image is built up from a series of basis functions. Right: each of the DCT basis functions that comprise the image, and the corresponding weighting coefficient. Middle: the basis function, after multiplication by the coefficient: this component is added to the final image. For clarity, the 8×8 macroblock in this example is magnified by 10x using bilinear interpolation.

For example, using ?415 (the DC coefficient) and rounding to the nearest integer

Notice that most of the higher-frequency elements of the sub-block (i.e., those with an x or y spatial frequency greater than 4) are compressed into zero values.

Entropy coding

Zigzag ordering of JPEG image components

Entropy coding is a special form of lossless data compression. It involves arranging the image components in a “zigzag” order employing run-length encoding (RLE) algorithm that groups similar frequencies together, inserting length coding zeros, and then using Huffman coding on what is left.

The JPEG standard also allows, but does not require, decoders to support the use of arithmetic coding, which is mathematically superior to Huffman coding. However, this feature has rarely been used, as it was historically covered by patents requiring royalty-bearing licenses, and because it is slower to encode and decode compared to Huffman coding. Arithmetic coding typically makes files about 5–7% smaller.

The previous quantized DC coefficient is used to predict the current quantized DC coefficient. The difference between the two is encoded rather than the actual value. The encoding of the 63 quantized AC coefficients does not use such prediction differencing.

The zigzag sequence for the above quantized coefficients are shown below. (The format shown is just for ease of understanding/viewing.)

If the i-th block is represented by B i {\displaystyle B_{i}} B_{i} and positions within each block are represented by ( p , q ) {\displaystyle (p,q)} (p,q) where p = 0 , 1 , . . . , 7 {\displaystyle p=0,1,…,7} p=0,1,...,7 and q = 0 , 1 , . . . , 7 {\displaystyle q=0,1,…,7} q=0,1,...,7, then any coefficient in the DCT image can be represented as B i ( p , q ) {\displaystyle B_{i}(p,q)} B_{i}(p,q). Thus, in the above scheme, the order of encoding pixels (for the i-th block) is B i ( 0 , 0 ) {\displaystyle B_{i}(0,0)} B_{i}(0,0), B i ( 0 , 1 ) {\displaystyle B_{i}(0,1)} B_{i}(0,1), B i ( 1 , 0 ) {\displaystyle B_{i}(1,0)} B_{i}(1,0), B i ( 2 , 0 ) {\displaystyle B_{i}(2,0)} B_{i}(2,0), B i ( 1 , 1 ) {\displaystyle B_{i}(1,1)} B_{i}(1,1), B i ( 0 , 2 ) {\displaystyle B_{i}(0,2)} B_{i}(0,2), B i ( 0 , 3 ) {\displaystyle B_{i}(0,3)} B_{i}(0,3), B i ( 1 , 2 ) {\displaystyle B_{i}(1,2)} B_{i}(1,2) and so on.

Baseline sequential JPEG encoding and decoding processes

This encoding mode is called baseline sequential encoding. Baseline JPEG also supports progressive encoding. While sequential encoding encodes coefficients of a single block at a time (in a zigzag manner), progressive encoding encodes similar-positioned batch of coefficients of all blocks in one go (called a scan), followed by the next batch of coefficients of all blocks, and so on. For example, if the image is divided into N 8×8 blocks B 0 , B 1 , B 2 , . . . , B n ? 1 {\displaystyle B_{0},B_{1},B_{2},…,B_{n-1}} {\displaystyle B_{0},B_{1},B_{2},...,B_{n-1}}, then a 3-scan progressive encoding encodes DC component, B i ( 0 , 0 ) {\displaystyle B_{i}(0,0)} B_{i}(0,0) for all blocks, i.e., for all i = 0 , 1 , 2 , . . . , N ? 1 {\displaystyle i=0,1,2,…,N-1} i=0,1,2,...,N-1, in first scan. This is followed by the second scan which encoding a few more components (assuming four more components, they are B i ( 0 , 1 ) {\displaystyle B_{i}(0,1)} B_{i}(0,1) to B i ( 1 , 1 ) {\displaystyle B_{i}(1,1)} B_{i}(1,1), still in a zigzag manner) coefficients of all blocks (so the sequence is: B 0 ( 0 , 1 ) , B 0 ( 1 , 0 ) , B 0 ( 2 , 0 ) , B 0 ( 1 , 1 ) , B 1 ( 0 , 1 ) , B 1 ( 1 , 0 ) , . . . , B N ( 2 , 0 ) , B N ( 1 , 1 ) {\displaystyle B_{0}(0,1),B_{0}(1,0),B_{0}(2,0),B_{0}(1,1),B_{1}(0,1),B_{1}(1,0),…,B_{N}(2,0),B_{N}(1,1)} {\displaystyle B_{0}(0,1),B_{0}(1,0),B_{0}(2,0),B_{0}(1,1),B_{1}(0,1),B_{1}(1,0),...,B_{N}(2,0),B_{N}(1,1)}), followed by all the remained coefficients of all blocks in the last scan.

It should be noted here that once all similar-positioned coefficients have been encoded, the next position to be encoded is the one occurring next in the zigzag traversal as indicated in the figure above. It has been found that baseline progressive JPEG encoding usually gives better compression as compared to baseline sequential JPEG due to the ability to use different Huffman tables (see below) tailored for different frequencies on each “scan” or “pass” (which includes similar-positioned coefficients), though the difference is not too large.

In the rest of the article, it is assumed that the coefficient pattern generated is due to sequential mode.

In order to encode the above generated coefficient pattern, JPEG uses Huffman encoding. The JPEG standard provides general-purpose Huffman tables; encoders may also choose to generate Huffman tables optimized for the actual frequency distributions in images being encoded.

The process of encoding the zig-zag quantized data begins with a run-length encoding explained below, where:

  • x is the non-zero, quantized AC coefficient.
  • RUNLENGTH is the number of zeroes that came before this non-zero AC coefficient.
  • SIZE is the number of bits required to represent x.
  • AMPLITUDE is the bit-representation of x.

The run-length encoding works by examining each non-zero AC coefficient x and determining how many zeroes came before the previous AC coefficient. With this information, two symbols are created:

Both RUNLENGTH and SIZE rest on the same byte, meaning that each only contains four bits of information. The higher bits deal with the number of zeroes, while the lower bits denote the number of bits necessary to encode the value of x.

This has the immediate implication of Symbol 1 being only able store information regarding the first 15 zeroes preceding the non-zero AC coefficient. However, JPEG defines two special Huffman code words. One is for ending the sequence prematurely when the remaining coefficients are zero (called “End-of-Block” or “EOB”), and another when the run of zeroes goes beyond 15 before reaching a non-zero AC coefficient. In such a case where 16 zeroes are encountered before a given non-zero AC coefficient, Symbol 1 is encoded “specially” as: (15, 0)(0).

The overall process continues until “EOB” – denoted by (0, 0) – is reached.

With this in mind, the sequence from earlier becomes:

(0, 1)(1); (0, 3)(5); (0, 1)(1); (0, 2)(2); (0, 1)(?1); (0, 1)(1); (0, 1)(?1); (0, 2)(2); (5, 1)(?1);
(0, 1)(?1); (0, 0).

(The first value in the matrix, ?26, is the DC coefficient; it is not encoded the same way. See above.)

From here, frequency calculations are made based on occurrences of the coefficients. In our example block, most of the quantized coefficients are small numbers that are not preceded immediately by a zero coefficient. These more-frequent cases will be represented by shorter code words.

Compression ratio and artifacts

This image shows the pixels that are different between a non-compressed image and the same image JPEG compressed with a quality setting of 50. Darker means a larger difference. Note especially the changes occurring near sharp edges and having a block-like shape.

The original image

The compressed 8×8 squares are visible in the scaled-up picture, together with other visual artifacts of the lossy compression

The resulting compression ratio can be varied according to need by being more or less aggressive in the divisors used in the quantization phase. Ten to one compression usually results in an image that cannot be distinguished by eye from the original. A compression ration of 100:1 is usually possible, but will look distinctly artifacted compared to the original. The appropriate level of compression depends on the use to which the image will be put.

Those who use the World Wide Web may be familiar with the irregularities known as compression artifacts that appear in JPEG images, which may take the form of noise around contrasting edges (especially curves and corners), or “blocky” images. These are due to the quantization step of the JPEG algorithm. They are especially noticeable around sharp corners between contrasting colors (text is a good example, as it contains many such corners). The analogous artifacts in MPEG video are referred to as mosquito noise, as the resulting “edge busyness” and spurious dots, which change over time, resemble mosquitoes swarming around the object.[22] [23]

These artifacts can be reduced by choosing a lower level of compression; they may be completely avoided by saving an image using a lossless file format, though this will result in a larger file size. The images created with ray-tracing programs have noticeable blocky shapes on the terrain. Certain low-intensity compression artifacts might be acceptable when simply viewing the images, but can be emphasized if the image is subsequently processed, usually resulting in unacceptable quality. Consider the example below, demonstrating the effect of lossy compression on an edge detection processing step.

Image Lossless compression Lossy compression
Original Lossless-circle.png Lossy-circle.jpg
Processed byCanny edge detector Lossless-circle-canny.png Lossy-circle-canny.png

Some programs allow the user to vary the amount by which individual blocks are compressed. Stronger compression is applied to areas of the image that show fewer artifacts. This way it is possible to manually reduce JPEG file size with less loss of quality.

Since the quantization stage always results in a loss of information, JPEG standard is always a lossy compression codec. (Information is lost both in quantizing and rounding of the floating-point numbers.) Even if the quantization matrix is a matrix of ones, information will still be lost in the rounding step.


Decoding to display the image consists of doing all the above in reverse.

Taking the DCT coefficient matrix (after adding the difference of the DC coefficient back in)

and taking the entry-for-entry product with the quantization matrix from above results in

which closely resembles the original DCT coefficient matrix for the top-left portion.

The next step is to take the two-dimensional inverse DCT (a 2D type-III DCT), which is given by:

f x , y = 1 4 ? u = 0 7 ? v = 0 7 ? ( u ) ? ( v ) F u , v cos ? [ ( 2 x + 1 ) u ? 16 ] cos ? [ ( 2 y + 1 ) v ? 16 ] {\displaystyle f_{x,y}={\frac {1}{4}}\sum _{u=0}^{7}\sum _{v=0}^{7}\alpha (u)\alpha (v)F_{u,v}\cos \left[{\frac {(2x+1)u\pi }{16}}\right]\cos \left[{\frac {(2y+1)v\pi }{16}}\right]} f_{x,y}={\frac {1}{4}}\sum _{u=0}^{7}\sum _{v=0}^{7}\alpha (u)\alpha (v)F_{u,v}\cos \left[{\frac {(2x+1)u\pi }{16}}\right]\cos \left[{\frac {(2y+1)v\pi }{16}}\right]


  •   x {\displaystyle \ x} \ x is the pixel row, for the integers   0 ? x 8 {\displaystyle \ 0\leq x8} \ 0\leq x<8.
  •   y {\displaystyle \ y} \ y is the pixel column, for the integers   0 ? y 8 {\displaystyle \ 0\leq y8} \ 0\leq y<8.
  •   ? ( u ) {\displaystyle \ \alpha (u)} \ \alpha (u) is defined as above, for the integers   0 ? u 8 {\displaystyle \ 0\leq u8} \ 0\leq u<8.
  •   F u , v {\displaystyle \ F_{u,v}} \ F_{u,v} is the reconstructed approximate coefficient at coordinates   ( u , v ) . {\displaystyle \ (u,v).} \ (u,v).
  •   f x , y {\displaystyle \ f_{x,y}} \ f_{x,y} is the reconstructed pixel value at coordinates   ( x , y ) {\displaystyle \ (x,y)} \ (x,y)

Rounding the output to integer values (since the original had integer values) results in an image with values (still shifted down by 128)

Notice the slight differences between the original (top) and decompressed image (bottom), which is most readily seen in the bottom-left corner.

A History of File Sharing & the Tech That Paved the Way

13 Aug 2013

It’s incredible when one reflects back and considers what it’s taken to get us where we are today with communication, technology and information sharing.  I came across this great timeline representation by of the history of file sharing and the technology that paved the way.  Wow.. what a ride..  Check this amazing interactive timeline out and possibly discover (or remember) some incredible milestones that make communication, networking and sharing what it is today!

A History of File Sharing & the Tech That Paved the Way

Since the dawning of dawn, people shared ideas and information. First, ideas and information were shared by grunts and pointing, and then we sobered up a bit and expressed ourselves in words. Then, really bored monks in abbots, who wished they had just stayed bored when Vikings began doing Viking things to them, painstakingly wrote down words into something called the Bible by hand. Then comes the printing press, yada yada – BOOM – here’s a computer – BAM – there’s the internet. Idea and information sharing becomes typified as file sharing. While it has done revolutionary things for telecommunications, globalization, instantaneous sharing of ideas and history-in-the-making moments, it has also received a lot of guff for disrupting incumbent means of distribution. Let’s take a brief look at the history of things that led to file sharing.

Scroll over the sides of the timeline to go to the next event.

Video Content for a SEO World

02 Aug 2013 – Tina Courtney-Brown – Featured –

PoD_HD_Camera_SEO_YouTube (Custom)

Video content is the life force of the web, infusing movement, sound, and priceless engagement to the legions of people waiting to hear and see your message. Done with aplomb, videos create indelible experiences for people to bond with your message and brand, in ways that can literally be unforgettable.

Video content can also equate to SEO gold. In a recent study on content, ReelSEO proclaimed videos are a whopping 50 percent more likely to be found in a search, compared to plain text. With conversion rates having this much potential, it’s time to seriously consider your move into the world of viral videos.


Why Videos Rock SEO

A 50 percent increase in search clicks may not be the norm, but it’s clear that this kind of optimization is more than possible. Why? Because the web is built on text content, and anything that stands out from the pack is immediately more likely to draw attention.

Sure, it may seem like YouTube is overflowing with generic video content, but compare that to the sea of web pages, and video is a tiny pixel on a big screen full of data. That equates to a leg up in your SEO efforts. Only a small fraction of current video content is properly optimized, which means there’s a serious potential for getting your audience’s undivided attention.


Don’t Think Like a Marketer

The first step in creating video content that moves your SEO needle is to stop thinking like a marketer for your brand, and start thinking like someone searching for your goods or services.

Videos usually accomplish one of two goals: they entertain, or they instruct – preferably with notable expertise or engagement. Take a gander through YouTube’s treasure troves, and you’ll see a lot of popular videos with “How To” in their titles. Assess what works, and what makes the most sense for the message you’re attempting to share, and move forward with your vision.

Video titles, as you can well imagine, are absolutely critical to finding your intended audience. They need to be concise, informative, and they should clearly articulate what the viewer can expect when they choose to watch. Equally important, your title should be eye-catching; the title alone will sometimes make or break a user’s decision to press play, so spend serious time crafting the perfect hook.


Choose Keywords Wisely

Just as paramount to your video’s title are the keywords you choose to describe it. Ideally, at least one main keyword will appear in your title too. The process by which you’ll choose these keywords is actually pretty identical to that of text content. The difference is simply where you’ll place your selected keywords; in the case of videos, these will appear in your title, description, and tags. Use standard tools like Google Adwords to verify your keywords are in fact frequently used in similar searches. Then weave them into each descriptor with clarity, brevity, and a little pizzazz.


Placement Matters

Once you’ve produced a video you’re proud to show the masses, it’s time to rein in the eyeballs. To get the most out of SEO, you’ll want to post the video in a variety of places. At the bare minimum, video content should be showcased on your YouTube channel and your company’s website. If you have a company blog, definitely show-off the goods here too. You don’t need to post the actual video each time, but can always link to it on your YouTube page.

Every time you post the video online, however, it’s equally important to choose your words carefully once more. This means integrating your keywords and insuring text links are short and to the point. And here’s a rarely used but very powerful tip: transcribe your videos for maximum SEO magic. Sure, this can be tedious, but if you’re smart in production and script out your content before shooting, you only need to modify the existing text a bit to make it reader-appropriate. The result will be oodles of SEO-friendly text content to accompany your video – a very powerful duo indeed.


Share and Share Alike

Now that your video is produced and proudly showcased, your final step is some well-strategized social callouts. Use your active Twitter and Facebook accounts to alert your existing audience, and once again, choose the words that accompany the blasts very succinctly. It’s also wise to stagger your social shares across a number of days, rather than inundate your audience all at once. Since some of your fans are likely to follow you on more than one social channel, you’ll save them a little redundancy.

Finally, make sure to take a fair amount of compelling screenshots of your video to integrate into various campaigns. Don’t fall into the trap of posting your video and then forgetting it; allow it to continue to assist in your marketing strategies for as long as it feels current.

With statistics showing the popularity of videos over plain text in search results, and so few video content providers knocking it out of the SEO-park, there is ample opportunity to make major marketing headway with a few smart steps. Adopting a holistic and step-by-step approach to video production that includes smart SEO-tactics could equal a major marketing windfall for your team. Be ahead of your competitors; perfect the art of video search engine optimization.

Social Media is Key to B2B Content Marketing

31 Jul 2013 – Pam Dyer – Featured –

B2B Marketing

91% of B2B marketers now use social media as a content marketing tool.


Social media is key to b2b content marketing Social Media is Key to B2B Content Marketing, B2B marketers are distributing their content on social networks more than ever before.

A recent study conducted by the Content Marketing Institute and Marketing Profs confirms that content marketing remains a top priority for B2B marketers, with the vast majority leveraging the practice as part of their marketing strategy. But many are uncertain about how to successfully employ the many tactics available to them.


Content marketing is the art of communicating with your customers and prospects without selling. It is non-interruptive — instead of directly advertising your products or services, you are communicating with your target audience by sharing valuable, free information. The core of this content strategy is the belief that buyers will be driven to do business with you if you provide valuable information to them on an ongoing basis.


If you have a website, a blog, or maintain a presence on Facebook, Twitter, or other social networks, you are a publisher. You need to think like one, and build a digital content marketing strategy that leverages what you create — blog posts, website articles, images, and multimedia like videos, slideshows, and infographics — to enhance consumer engagement and conversion rates.

Here are some interesting statistics from the 2013 B2B Content Marketing Benchmarks, Budgets and Trends – North America:
More B2B marketers are using content marketing to achieve organizational goals:



Brand awareness, customer acquisition, and lead generation are the top B2B content marketing goals:


87% of B2B marketers use social media to distribute content — it is now the most popular content marketing tactic:

B2B marketers are using an average of 5 social distribution channels.

LinkedIn is the top social network when it comes to B2B content marketing. It’s interesting to note that Pinterest is now being used by more than 25% of B2B marketers — read 18 Tips for Optimizing Your Pinterest Images to Improve SEO to learn how to get positive results and drive traffic with the visual social network.


63% of B2B content marketers say that producing enough content is now their biggest challenge:



The New World of Page Ranking

29 Jul 2013 – Tina Courtney-Brown – Featured –

PoD_PageRank (Custom)

Google, and search engines in general, used to act as a one-size-fits-all format. If person A and person B both searched for “best chocolate in the world,” it used to be both individuals would see the same list of rankings. Now we live in a world of customization, where Google’s results reflect not just the search terms and keywords used, but the complex personalization derived from a given user’s full interaction with the suite of Google products. Since Google, and search engines in general, are truly trying to give searchers exactly what they want, the process has seen a genesis of customization. One-size-fits-all no longer applies.

If your sole focus as a company investing in SEO is to see a high Google page rank, stop the obsession – now. High rankings don’t equate to a stellar business profile; revenues do. And now that page rankings are becoming varied, it’s much less reliable to equate a high ranking to full-scale success. So putting all your eggs in one proverbial basket is not only risky, it’s now completely illogical.

What should you focus on? Quality traffic, quality content, and a quality user experience. Yes, rankings factor in here, there’s no doubt about it, but it isn’t a means to an end. Quality is. That’s what will keep users returning, again and again. And since not all of your visitors are likely sent via a search engine, it’s time to consider the whole enchilada, and stop worrying about what Google might think.

The Role of Customized Search Results

Let’s say I’m an employee at a place called Company SEO. It’s safe to say I’m probably visiting that company’s web site often, and using related search terms on a frequent basis. If I do so while logged in to my Gmail account, or any other Google tool, this correlation begins to become apparent. It’s therefore more likely that if I search for a keyword or term targeted by Company SEO, I will see its results rank higher, as Google has correctly determined I am interested in what that company/author has to say.

Google’s results cannot be quantified in any meaningful manner. We’re seeing fewer and fewer ranking reports as a result. The rankings you see in any given search are not just based on the keywords — Google also incorporates your location, service provider, previous search history, and various other personal factors. Since we can’t predict a given user’s customization, it’s crazy these days to fully focus on a high SEO ranking.

Anyone who has traveled recently can attest to this shift. Search for “best chocolate in the world” in San Francisco and you’ll see a different set of results than if you’re traveling in Sweden. The point is, you can’t control rankings in the way we’d all like to anymore, so it’s time to shift focus.


Make Traffic and Conversions Your Top Priorities

This is not a call for all to give up the SEO game. It’s just a matter of adjusting how you approach the goals. By moving your emphasis to quality and consistency, you’ll still be aiming for the highest rankings, but in a manner that will yield better results.

Traffic and conversion rates are your best SEO friends, because they make the most of whatever ranking you are currently achieving. The more you capitalize on your traffic, the more retention and loyalty you’ll achieve, and customers will keep coming back. For instance, a site with high page rankings won’t maintain that status for long if they develop a high bounce rate. You can send 10,000 visitors to your site per day via Google, but if you can’t convert those into revenue generating visits, the eyeballs are costing you cash, not the other way around.


Generate Quality Traffic

As with everything in this world, quality trumps quantity. What you’re after are targeted links and referrals full of visitors that are truly after what you offer. Your marketing strategy no doubt contains a myriad of efforts to generate these quality visits. To really be a player in SEO these days, these campaigns should involve the following:

  • Organic search
  • Paid search
  • External links, from articles, bloggers, news sites, etc.
  • Press releases and other PR efforts
  • Social signals from Facebook, Pinterest, Twitter, LinkedIn, StumbleUpon, etc.
  • Local map listings
  • Online advertising
  • Direct traffic via offline strategies

Yes, organic search still sits at the top of the list above, but if it’s your sole focus, you’ll definitely waste your efforts. Failure to consider the other factors means you’ll experience just a smidgen of your potential success.

Pay attention to your analytics so you can understand where your site is succeeding and failing with regards to visits and conversions. Ascertain where the bulk of your traffic truly comes from (here’s a clue: it’s not always from Google) and adjust the list above accordingly. It may be that local listings or even offline strategies trump search in terms of what works best for your specific needs.

The point is simple: in the last few years, page rankings have become the Holy Grail, and it’s time to stop obsessing over a top page ranking. You can’t begin to control rankings from a personalization perspective, so stop losing sleep over your own ranking ebbs and flows. Instead, focus on the data you can control – namely traffic and conversions. If you’re aces at converting high percentages of your site’s visitors, you’re on a winning streak. It’s not a matter of being #1 for a search term, but in making your customers and visitors happy.