GifImage

Inheritance: java.lang.Object, com.aspose.imaging.DisposableObject, com.aspose.imaging.DataStreamSupporter, com.aspose.imaging.Image, com.aspose.imaging.RasterImage, com.aspose.imaging.RasterCachedImage, com.aspose.imaging.RasterCachedMultipageImage

All Implemented Interfaces: com.aspose.imaging.IMultipageImageExt, com.aspose.fileformats.core.interfaces.IInterlaced

public final class GifImage extends RasterCachedMultipageImage implements IMultipageImageExt, IInterlaced

The API for Graphical Interchange Format (GIF) image file provides developers with versatile tools for processing compressed raster images and animated GIFs. Offering features like XMP metadata handling, color palette settings, background and transparent color control, opacity settings, resize, crop, filter application, gamma corrections, contrast adjustment, grayscale transformation, and conversion to other formats. This API empowers seamless manipulation and enhancement of GIF images for a wide range of applications.

Constructors

ConstructorDescription
GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette)Initializes a new instance of the GifImage class.
GifImage(GifFrameBlock firstFrame)Initializes a new instance of the GifImage class.
GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette, boolean isPaletteSorted, byte paletteColorResolution, byte paletteBackgroundColorIndex, byte aspectRatio, boolean hasTrailer)Initializes a new instance of the GifImage class.

Methods

MethodDescription
getFileFormat()Gets a value of file format
getXmpData()Gets the XMP metadata.
setXmpData(XmpPacketWrapper value)Sets the XMP metadata.
hasTrailer()Gets or sets a value indicating whether GIF has trailer.
setTrailer(boolean value)Gets or sets a value indicating whether GIF has trailer.
isPaletteSorted()Gets or sets a value indicating whether palette is sorted.
setPaletteSorted(boolean value)Gets or sets a value indicating whether palette is sorted.
getLoopsCount()Gets the loops count (If gif image contains information about loops)
setLoopsCount(int value)The loops count (If gif image contains information about loops)
getPaletteColorResolutionBits()Gets or sets the palette color resolution bits.
setPaletteColorResolutionBits(byte value)Sets the palette color resolution bits.
getPageCount()Gets the page count.
getPages()Gets the pages.
getBlocks()Gets the GIF blocks.
isInterlaced()Gets a value indicating whether this image instance is interlaced.
getOriginalOptions()Gets the options based on the original file settings.
addPage(RasterImage page)Adds page to the image.
getActiveFrame()Gets the active frame.
setActiveFrame(GifFrameBlock value)Sets the active frame.
getBackgroundColor()Gets the background color.
setBackgroundColor(Color value)Sets the background color.
getBackgroundColorIndex()Gets the background color index.
setBackgroundColorIndex(byte value)Sets the background color index.
getPixelAspectRatio()Gets the pixel aspect ratio.
setPixelAspectRatio(byte value)Sets the pixel aspect ratio.
hasTransparentColor()Gets a value indicating whether active frame has transparent color.
getTransparentColor()Gets active frame transparent color.
setTransparentColor(boolean value)A value indicating whether active frame has transparent color.
hasBackgroundColor()Gets a value indicating whether image has background color.
getImageOpacity()Gets opacity of this image (active frame).
getPageExportingAction()Gets the page exporting action.
setPageExportingAction(PageExportingAction value)Sets the page exporting action.
resize(int newWidth, int newHeight, int resizeType)Resizes the image.
resizeFullFrame(int newWidth, int newHeight, int resizeType)Resizes the image using full frames for each GIF page.
rotateFlip(int rotateFlipType)Rotates, flips, or rotates and flips the Active frame only.
dither(int ditheringMethod, int bitsCount, IColorPalette customPalette)Performs dithering on the current image.
crop(Rectangle rectangle)Cropping the image.
adjustGamma(float gamma)Gamma-correction of an image.
filter(Rectangle rectangle, FilterOptionsBase options)Filters the specified rectangle.
resize(int newWidth, int newHeight, ImageResizeSettings settings)Resizes the image.
setFrameTime(int time)Sets all frames duration in milliseconds.
adjustBrightness(int brightness)Adjust of a brightness for image.
adjustContrast(float contrast)Adjusts the contrast.
adjustGamma(float gammaRed, float gammaGreen, float gammaBlue)Gamma-correction of an image.
grayscale()Transformation of an image to its grayscale representation
binarizeFixed(byte threshold)Binarization of an image with predefined threshold
binarizeOtsu()Binarization of an image with Otsu thresholding
binarizeBradley(double brightnessDifference)Binarization of an image using Bradley’s adaptive thresholding algorithm using the integral image thresholding
orderBlocks()Orders the GIF blocks according to the GIF specification.
clearBlocks()Clears all the GIF blocks.
insertBlock(int index, IGifBlock block)Adds a new GIF block.
addBlock(IGifBlock block)Adds a new GIF block.
removeBlock(IGifBlock block)Removes the GIF block.
resizeProportional(int newWidth, int newHeight, int resizeType)Performs proportional resize on the image.
rotate(float angle, boolean resizeProportionally, Color backgroundColor)RasterCachedMultipageImage.rotate(float, boolean, Color) image around the center.

Example: This example shows how to create a GIF image and save it to a file.

String dir = "c:\\temp\\";

// Create a GIF Frame block of 100x100 px.
com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock firstBlock = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);
try {
    // Fill the entire block in red.
    com.aspose.imaging.Graphics gr = new com.aspose.imaging.Graphics(firstBlock);
    com.aspose.imaging.brushes.SolidBrush brush = new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getRed());
    gr.fillRectangle(brush, firstBlock.getBounds());

    com.aspose.imaging.fileformats.gif.GifImage gifImage = new com.aspose.imaging.fileformats.gif.GifImage(firstBlock);
    try {
        gifImage.save(dir + "output.gif");
    } finally {
        gifImage.dispose();
    }
} finally {
    firstBlock.dispose();
}

Example: Create multipage GIF image using single page raster images.

static void main(String[] args)
{
    // Load frames
    RasterImage[] frames = loadFrames("Animation frames");

    // Create GIF image using the first frame
    try (GifImage image = new GifImage(new GifFrameBlock(frames[0])))
    {
        // Add frames to the GIF image using the AddPage method
        for (int index = 1; index < frames.length; index++)
        {
            image.addPage(frames[index]);
        }

        // Save GIF image
        image.save("Multipage.gif");
    }

    // release resources
    for (RasterImage frame : frames)
    {
        frame.close();
    }
}

private static RasterImage[] loadFrames(String directory)
{
    LinkedList<RasterImage> list = new LinkedList<RasterImage>();
    String[] fileList = new File(directory).list();
    if (fileList != null)
    {
        for (String filePath : fileList)
        {
            list.add((RasterImage) Image.load(filePath));
        }
    }
                
    return list.toArray(new RasterImage[0]);
}

Example: Export of part of animation from GIF image based on time interval.

try (Image image = Image.load("Animation.gif"))
{
    GifOptions options = new GifOptions();
    options.setFullFrame(true);
    final MultiPageOptions multiPageOptions = new MultiPageOptions();
    multiPageOptions.setMode(MultiPageMode.TimeInterval);
    multiPageOptions.setTimeInterval(new TimeInterval(0, 400));
    options.setMultiPageOptions(multiPageOptions);

    image.save("PartOfAnimation.gif", options);
}

GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette)

public GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette)

Initializes a new instance of the GifImage class.

Parameters:

ParameterTypeDescription
firstFrameGifFrameBlockThe first frame to initialize gif image with.
globalPaletteIColorPaletteThe global palette to use. Note if both firstFrame and globalPalette are null then default global palette is used.

GifImage(GifFrameBlock firstFrame)

public GifImage(GifFrameBlock firstFrame)

Initializes a new instance of the GifImage class.

Parameters:

ParameterTypeDescription
firstFrameGifFrameBlockThe first frame to initialize gif image with.

GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette, boolean isPaletteSorted, byte paletteColorResolution, byte paletteBackgroundColorIndex, byte aspectRatio, boolean hasTrailer)

public GifImage(GifFrameBlock firstFrame, IColorPalette globalPalette, boolean isPaletteSorted, byte paletteColorResolution, byte paletteBackgroundColorIndex, byte aspectRatio, boolean hasTrailer)

Initializes a new instance of the GifImage class.

Parameters:

ParameterTypeDescription
firstFrameGifFrameBlockThe first frame to initialize gif image with.
globalPaletteIColorPaletteThe global palette to use. Note if both firstFrame and globalPalette are null then default global palette is used.
isPaletteSortedbooleanif set to true the palette is sorted. Note the parameter is used when globalPalette is not null.
paletteColorResolutionbyteThe palette color resolution. Note the parameter is used when globalPalette is not null.
paletteBackgroundColorIndexbyteThe palette background color index.
aspectRatiobyteThe aspect ratio.
hasTrailerbooleanif set to true the gif image has trailer otherwise no trailer written at the end of the stream.

getFileFormat()

public long getFileFormat()

Gets a value of file format

Returns: long

getXmpData()

public XmpPacketWrapper getXmpData()

Gets the XMP metadata.

Returns: XmpPacketWrapper - The XMP metadata.

setXmpData(XmpPacketWrapper value)

public void setXmpData(XmpPacketWrapper value)

Sets the XMP metadata.

Parameters:

ParameterTypeDescription
valueXmpPacketWrapperThe XMP metadata.

hasTrailer()

public boolean hasTrailer()

Gets or sets a value indicating whether GIF has trailer.

Returns: boolean - true if GIF has trailer; otherwise, false.

setTrailer(boolean value)

public void setTrailer(boolean value)

Gets or sets a value indicating whether GIF has trailer.

Parameters:

ParameterTypeDescription
valuebooleantrue if GIF has trailer; otherwise, false.

isPaletteSorted()

public boolean isPaletteSorted()

Gets or sets a value indicating whether palette is sorted.

Returns: boolean - true if palette is sorted; otherwise, false.

setPaletteSorted(boolean value)

public void setPaletteSorted(boolean value)

Gets or sets a value indicating whether palette is sorted.

Parameters:

ParameterTypeDescription
valuebooleantrue if palette is sorted; otherwise, false.

getLoopsCount()

public int getLoopsCount()

Gets the loops count (If gif image contains information about loops)

Value: The loops count or 1 (default value)

Returns: int - the loops count (If gif image contains information about loops)

setLoopsCount(int value)

public void setLoopsCount(int value)

The loops count (If gif image contains information about loops)

Value: The loops count or 1 (default value)

Parameters:

ParameterTypeDescription
valueintthe loops count (If gif image contains information about loops)

getPaletteColorResolutionBits()

public byte getPaletteColorResolutionBits()

Gets or sets the palette color resolution bits.

Returns: byte - The palette color resolution bits.

setPaletteColorResolutionBits(byte value)

public void setPaletteColorResolutionBits(byte value)

Sets the palette color resolution bits.

Parameters:

ParameterTypeDescription
valuebyteThe palette color resolution bits.

getPageCount()

public int getPageCount()

Gets the page count.

Value: The page count.

Returns: int - the page count.

getPages()

public Image[] getPages()

Gets the pages.

Value: The pages.

Returns: com.aspose.imaging.Image[] - the pages.

getBlocks()

public IGifBlock[] getBlocks()

Gets the GIF blocks.

Returns: com.aspose.imaging.fileformats.gif.IGifBlock[] - the GIF blocks.

isInterlaced()

public boolean isInterlaced()

Gets a value indicating whether this image instance is interlaced.

Value: true if this image instance is interlaced; otherwise, false.

Returns: boolean - a value indicating whether this image instance is interlaced.

getOriginalOptions()

public ImageOptionsBase getOriginalOptions()

Gets the options based on the original file settings. This can be helpful to keep bit-depth and other parameters of the original image unchanged. For example, if we load a black-white PNG image with 1 bit per pixel and then save it using the DataStreamSupporter.save(String) method, the output PNG image with 8-bit per pixel will be produced. To avoid it and save PNG image with 1-bit per pixel, use this method to get corresponding saving options and pass them to the Image.save(String, ImageOptionsBase) method as the second parameter.

Returns: ImageOptionsBase - The options based on the original file settings.

addPage(RasterImage page)

public void addPage(RasterImage page)

Adds page to the image.

Parameters:

ParameterTypeDescription
pageRasterImageThe page to add.

Example: Create multipage GIF image using single page raster images.

static void main(String[] args)
{
    // Load frames
    RasterImage[] frames = loadFrames("Animation frames");

    // Create GIF image using the first frame
    try (GifImage image = new GifImage(new GifFrameBlock(frames[0])))
    {
        // Add frames to the GIF image using the AddPage method
        for (int index = 1; index < frames.length; index++)
        {
            image.addPage(frames[index]);
        }

        // Save GIF image
        image.save("Multipage.gif");
    }

    // release resources
    for (RasterImage frame : frames)
    {
        frame.close();
    }
}

private static RasterImage[] loadFrames(String directory)
{
    LinkedList<RasterImage> list = new LinkedList<RasterImage>();
    String[] fileList = new File(directory).list();
    if (fileList != null)
    {
        for (String filePath : fileList)
        {
            list.add((RasterImage) Image.load(filePath));
        }
    }
                
    return list.toArray(new RasterImage[0]);
}

getActiveFrame()

public GifFrameBlock getActiveFrame()

Gets the active frame.

Value: The active frame.

Returns: GifFrameBlock - the active frame.

Example: The following example shows how to remove all blocks from a GIF image.

com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock firstBlock = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);
com.aspose.imaging.fileformats.gif.GifImage gifImage = new com.aspose.imaging.fileformats.gif.GifImage(firstBlock);
try {
    if (gifImage.getActiveFrame() != null) {
        System.out.println("Active frame size: " + gifImage.getActiveFrame().getSize());
    } else {
        System.out.println("Active frame is not set");
    }

    System.out.println("Clear all the blocks");
    gifImage.clearBlocks();

    if (gifImage.getActiveFrame() != null) {
        System.out.println("Active frame size: " + gifImage.getActiveFrame().getSize());
    } else {
        System.out.println("Active frame is not set");
    }
} finally {
    firstBlock.dispose();
    gifImage.dispose();
}

// The output looks like this:
// Active frame size: { Width = 100, Height = 100}
// Clear all the blocks
// Active frame is not set

setActiveFrame(GifFrameBlock value)

public void setActiveFrame(GifFrameBlock value)

Sets the active frame.

Value: The active frame.

Parameters:

ParameterTypeDescription
valueGifFrameBlockthe active frame.

getBackgroundColor()

public Color getBackgroundColor()

Gets the background color.

Value: The background color.

Returns: Color - the background color.

setBackgroundColor(Color value)

public void setBackgroundColor(Color value)

Sets the background color.

Value: The background color.

Parameters:

ParameterTypeDescription
valueColorthe background color.

getBackgroundColorIndex()

public byte getBackgroundColorIndex()

Gets the background color index.

Value: The background color index.

Returns: byte - the background color index.

setBackgroundColorIndex(byte value)

public void setBackgroundColorIndex(byte value)

Sets the background color index.

Value: The background color index.

Parameters:

ParameterTypeDescription
valuebytethe background color index.

getPixelAspectRatio()

public byte getPixelAspectRatio()

Gets the pixel aspect ratio.

Value: The pixel aspect ratio.

Returns: byte - the pixel aspect ratio.

setPixelAspectRatio(byte value)

public void setPixelAspectRatio(byte value)

Sets the pixel aspect ratio.

Value: The pixel aspect ratio.

Parameters:

ParameterTypeDescription
valuebytethe pixel aspect ratio.

hasTransparentColor()

public boolean hasTransparentColor()

Gets a value indicating whether active frame has transparent color.

Returns: boolean - a value indicating whether active frame has transparent color.

getTransparentColor()

public Color getTransparentColor()

Gets active frame transparent color.

Returns: Color - active frame transparent color.

setTransparentColor(boolean value)

public void setTransparentColor(boolean value)

A value indicating whether active frame has transparent color.

Parameters:

ParameterTypeDescription
valuebooleana value indicating whether active frame has transparent color.

hasBackgroundColor()

public boolean hasBackgroundColor()

Gets a value indicating whether image has background color.

Returns: boolean - a value indicating whether image has background color.

getImageOpacity()

public float getImageOpacity()

Gets opacity of this image (active frame).

Value: The opacity value between 0.0 (fully transparent) and 1.0 (fully opaque).

Returns: float - opacity of this image (active frame).

getPageExportingAction()

public PageExportingAction getPageExportingAction()

Gets the page exporting action. Please note that setting this method will automatically release page resources after it is executed. It will be executed just before each page is saved.

Value: The page exporting action.

Returns: PageExportingAction - the page exporting action.

setPageExportingAction(PageExportingAction value)

public void setPageExportingAction(PageExportingAction value)

Sets the page exporting action. Please note that setting this method will automatically release page resources after it is executed. It will be executed just before each page is saved.

Value: The page exporting action.

Parameters:

ParameterTypeDescription
valuePageExportingActionthe page exporting action.

resize(int newWidth, int newHeight, int resizeType)

public void resize(int newWidth, int newHeight, int resizeType)

Resizes the image.

Parameters:

ParameterTypeDescription
newWidthintThe new width.
newHeightintThe new height.
resizeTypeintThe resize type.

Example: This example loads a GIF image and resizes it using various resizing methods.

String dir = "c:\\temp\\";

com.aspose.imaging.fileformats.gif.GifImage image = (com.aspose.imaging.fileformats.gif.GifImage) com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    // Scale up by 2 times using Nearest Neighbour resampling.
    image.resize(image.getWidth() * 2, image.getHeight() * 2, com.aspose.imaging.ResizeType.NearestNeighbourResample);
    image.save(dir + "upsample.nearestneighbour.gif");
} finally {
    image.dispose();
}

image = (com.aspose.imaging.fileformats.gif.GifImage) com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    // Scale down by 2 times using Nearest Neighbour resampling.
    image.resize(image.getWidth() / 2, image.getHeight() / 2, com.aspose.imaging.ResizeType.NearestNeighbourResample);
    image.save(dir + "downsample.nearestneighbour.gif");
} finally {
    image.dispose();
}

image = (com.aspose.imaging.fileformats.gif.GifImage) com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    // Scale up by 2 times using Bilinear resampling.
    image.resize(image.getWidth() * 2, image.getHeight() * 2, com.aspose.imaging.ResizeType.BilinearResample);
    image.save(dir + "upsample.bilinear.gif");
} finally {
    image.dispose();
}

image = (com.aspose.imaging.fileformats.gif.GifImage) com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    // Scale down by 2 times using Bilinear resampling.
    image.resize(image.getWidth() / 2, image.getHeight() / 2, com.aspose.imaging.ResizeType.BilinearResample);
    image.save(dir + "downsample.bilinear.gif");
} finally {
    image.dispose();
}

resizeFullFrame(int newWidth, int newHeight, int resizeType)

public void resizeFullFrame(int newWidth, int newHeight, int resizeType)

Resizes the image using full frames for each GIF page. Required to avoid possible artifacts appearance.

Parameters:

ParameterTypeDescription
newWidthintThe new width.
newHeightintThe new height.
resizeTypeintThe resize type.

rotateFlip(int rotateFlipType)

public void rotateFlip(int rotateFlipType)

Rotates, flips, or rotates and flips the Active frame only.

Parameters:

ParameterTypeDescription
rotateFlipTypeintThe rotation flip type.

Example: This example loads a GIF image, rotates it by 90 degrees clockwise and optionally flips the image horizontally and(or) vertically.


// The helper class used in the main example below.
class Utils {
    // The helper method to get a string representation of the file format.
    public String getRotateFlipTypeString(int rotateFlipType) {
        if (rotateFlipType == com.aspose.imaging.RotateFlipType.RotateNoneFlipNone) {
            return "RotateNoneFlipNone";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate90FlipNone) {
            return "Rotate90FlipNone";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate180FlipNone) {
            return "Rotate180FlipNone";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate270FlipNone) {
            return "Rotate270FlipNone";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.RotateNoneFlipX) {
            return "RotateNoneFlipX";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate90FlipX) {
            return "Rotate90FlipX";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate180FlipX) {
            return "Rotate180FlipX";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate270FlipX) {
            return "Rotate270FlipX";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.RotateNoneFlipY) {
            return "RotateNoneFlipY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate90FlipY) {
            return "Rotate90FlipY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate180FlipY) {
            return "Rotate180FlipY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate270FlipY) {
            return "Rotate270FlipY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.RotateNoneFlipXY) {
            return "RotateNoneFlipXY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate90FlipXY) {
            return "Rotate90FlipXY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate180FlipXY) {
            return "Rotate180FlipXY";
        } else if (rotateFlipType == com.aspose.imaging.RotateFlipType.Rotate270FlipXY) {
            return "Rotate270FlipXY";
        } else {
            return "UNDEFINED";
        }
    }
}

// Here is the main example
Utils utils = new Utils();

String dir = "c:\\temp\\";

int[] rotateFlipTypes = new int[]
        {
                com.aspose.imaging.RotateFlipType.Rotate90FlipNone,
                com.aspose.imaging.RotateFlipType.Rotate90FlipX,
                com.aspose.imaging.RotateFlipType.Rotate90FlipXY,
                com.aspose.imaging.RotateFlipType.Rotate90FlipY,
        };

for (int rotateFlipType : rotateFlipTypes) {
    // Rotate, flip and save to the output file.
    com.aspose.imaging.fileformats.gif.GifImage image = (com.aspose.imaging.fileformats.gif.GifImage) com.aspose.imaging.Image.load(dir + "sample.gif");
    try {
        image.rotateFlip(rotateFlipType);
        image.save(dir + "sample." + utils.getRotateFlipTypeString(rotateFlipType) + ".png", new com.aspose.imaging.imageoptions.PngOptions());
    } finally {
        image.dispose();
    }
}

dither(int ditheringMethod, int bitsCount, IColorPalette customPalette)

public void dither(int ditheringMethod, int bitsCount, IColorPalette customPalette)

Performs dithering on the current image.

Parameters:

ParameterTypeDescription
ditheringMethodintThe dithering method.
bitsCountintThe final bits count for dithering.
customPaletteIColorPaletteThe custom palette for dithering.

Example: The following example loads a GIF image and performs threshold and floyd dithering using different palette depth.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Perform threshold dithering using 4-bit color palette which contains 16 colors.
    // The more bits specified the higher quality and the bigger size of the output image.
    // Note that only 1-bit, 4-bit and 8-bit palettes are supported at the moment.
    gifImage.dither(com.aspose.imaging.DitheringMethod.ThresholdDithering, 4, null);

    gifImage.save(dir + "sample.ThresholdDithering4.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Perform floyd dithering using 1-bit color palette which contains only 2 colors - black and white.
    // The more bits specified the higher quality and the bigger size of the output image.
    // Note that only 1-bit, 4-bit and 8-bit palettes are supported at the moment.
    gifImage.dither(com.aspose.imaging.DitheringMethod.FloydSteinbergDithering, 1, null);

    gifImage.save(dir + "sample.FloydSteinbergDithering1.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

crop(Rectangle rectangle)

public void crop(Rectangle rectangle)

Cropping the image.

Parameters:

ParameterTypeDescription
rectangleRectangleThe rectangle.

Example: The following example crops a GIF image. The following example crops a GIF image. The cropping area is be specified via Aspose.Imaging.Rectangle.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Crop the image. The cropping area is the rectangular central area of the image.
    com.aspose.imaging.Rectangle area = new com.aspose.imaging.Rectangle(
            gifImage.getWidth() / 4,
            gifImage.getHeight() / 4,
            gifImage.getWidth() / 2,
            gifImage.getHeight() / 2);
    gifImage.crop(area);

    // Save the cropped image to PNG
    gifImage.save(dir + "sample.Crop.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

adjustGamma(float gamma)

public void adjustGamma(float gamma)

Gamma-correction of an image.

Parameters:

ParameterTypeDescription
gammafloatGamma for red, green and blue channels coefficient

Example: The following example performs gamma-correction of a GIF image.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Set gamma coefficient for red, green and blue channels.
    gifImage.adjustGamma(2.5f);
    gifImage.save(dir + "sample.AdjustGamma.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

filter(Rectangle rectangle, FilterOptionsBase options)

public void filter(Rectangle rectangle, FilterOptionsBase options)

Filters the specified rectangle.

Parameters:

ParameterTypeDescription
rectangleRectangleThe rectangle.
optionsFilterOptionsBaseThe options.

Example: The following example applies various types of filters to a GIF image.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a median filter with a rectangle size of 5 to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.MedianFilterOptions(5));
    gifImage.save(dir + "sample.MedianFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a bilateral smoothing filter with a kernel size of 5 to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.BilateralSmoothingFilterOptions(5));
    gifImage.save(dir + "sample.BilateralSmoothingFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a Gaussian blur filter with a radius of 5 and a sigma value of 4.0 to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.GaussianBlurFilterOptions(5, 4.0));
    gifImage.save(dir + "sample.GaussianBlurFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a Gauss-Wiener filter with a radius of 5 and a smooth value of 4.0 to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.GaussWienerFilterOptions(5, 4.0));
    gifImage.save(dir + "sample.GaussWienerFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a motion wiener filter with a length of 5, a smooth value of 4.0 and an angle of 90.0 degrees to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.MotionWienerFilterOptions(10, 1.0, 90.0));
    gifImage.save(dir + "sample.MotionWienerFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Apply a sharpen filter with a kernel size of 5 and a sigma value of 4.0 to the entire image.
    gifImage.filter(gifImage.getBounds(), new com.aspose.imaging.imagefilters.filteroptions.SharpenFilterOptions(5, 4.0));
    gifImage.save(dir + "sample.SharpenFilter.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

resize(int newWidth, int newHeight, ImageResizeSettings settings)

public void resize(int newWidth, int newHeight, ImageResizeSettings settings)

Resizes the image.

Parameters:

ParameterTypeDescription
newWidthintThe new width.
newHeightintThe new height.
settingsImageResizeSettingsThe resize settings.

Example: This example loads a GIF image and resizes it using various resizing settings.

String dir = "c:\\temp\\";

com.aspose.imaging.ImageResizeSettings resizeSettings = new com.aspose.imaging.ImageResizeSettings();

// The adaptive algorithm based on weighted and blended rational function and lanczos3 interpolation.
resizeSettings.setMode(com.aspose.imaging.ResizeType.AdaptiveResample);

// The small rectangular filter
resizeSettings.setFilterType(com.aspose.imaging.ImageFilterType.SmallRectangular);

// The number of colors in the palette.
resizeSettings.setEntriesCount(256);

// The color quantization is not used
resizeSettings.setColorQuantizationMethod(com.aspose.imaging.ColorQuantizationMethod.None);

// The Euclidian method
resizeSettings.setColorCompareMethod(com.aspose.imaging.ColorCompareMethod.Euclidian);

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Scale down by 2 times using adaptive resampling.
    gifImage.resize(image.getWidth() / 2, image.getHeight() / 2, resizeSettings);

    // Save to PNG
    gifImage.save(dir + "downsample.adaptive.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

setFrameTime(int time)

public void setFrameTime(int time)

Sets all frames duration in milliseconds. Changing this value will reset delay for all frames.

Parameters:

ParameterTypeDescription
timeintThe time of frame duration in milliseconds.

adjustBrightness(int brightness)

public void adjustBrightness(int brightness)

Adjust of a brightness for image.

Parameters:

ParameterTypeDescription
brightnessintBrightness value.

Example: The following example performs brightness correction of a GIF image.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Set the brightness value. The accepted values of brightness are in the range [-255, 255].
    gifImage.adjustBrightness(50);
    gifImage.save(dir + "sample.AdjustBrightness.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

adjustContrast(float contrast)

public void adjustContrast(float contrast)

Adjusts the contrast.

Parameters:

ParameterTypeDescription
contrastfloatContrast value (in range [-100; 100])

Example: The following example performs contrast correction of a GIF image.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Set the contrast value. The accepted values of contrast are in the range [-100f, 100f].
    gifImage.adjustContrast(50f);
    gifImage.save(dir + "sample.AdjustContrast.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

adjustGamma(float gammaRed, float gammaGreen, float gammaBlue)

public void adjustGamma(float gammaRed, float gammaGreen, float gammaBlue)

Gamma-correction of an image.

Parameters:

ParameterTypeDescription
gammaRedfloatGamma for red channel coefficient
gammaGreenfloatGamma for green channel coefficient
gammaBluefloatGamma for blue channel coefficient

Example: The following example performs gamma-correction of a GIF image applying different coefficients for color components.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Set individual gamma coefficients for red, green and blue channels.
    gifImage.adjustGamma(1.5f, 2.5f, 3.5f);
    gifImage.save(dir + "sample.AdjustGamma.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

grayscale()

public void grayscale()

Transformation of an image to its grayscale representation

Example: The following example transforms a colored GIF image to its grayscale representation. The following example transforms a colored GIF image to its grayscale representation. Grayscale images are composed exclusively of shades of gray and carry only intensity information.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    gifImage.grayscale();
    gifImage.save(dir + "sample.Grayscale.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

binarizeFixed(byte threshold)

public void binarizeFixed(byte threshold)

Binarization of an image with predefined threshold

Parameters:

ParameterTypeDescription
thresholdbyteThreshold value. If corresponding gray value of a pixel is greater than threshold, a value of 255 will be assigned to it, 0 otherwise.

Example: The following example binarizes a GIF image with the predefined threshold. The following example binarizes a GIF image with the predefined threshold. Binarized images contain only 2 colors - black and white.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage djvuImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Binarize the image with a threshold value of 127.
    // If a corresponding gray value of a pixel is greater than 127, a value of 255 will be assigned to it, 0 otherwise.
    djvuImage.binarizeFixed((byte) 127);
    djvuImage.save(dir + "sample.BinarizeFixed.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

binarizeOtsu()

public void binarizeOtsu()

Binarization of an image with Otsu thresholding

Example: The following example binarizes a GIF image with Otsu thresholding. The following example binarizes a GIF image with Otsu thresholding. Binarized images contain only 2 colors - black and white.

String dir = "c:\\temp\\";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.gif");
try {
    com.aspose.imaging.fileformats.gif.GifImage gifImage = (com.aspose.imaging.fileformats.gif.GifImage) image;

    // Binarize the image with Otsu thresholding.
    gifImage.binarizeOtsu();
    gifImage.save(dir + "sample.BinarizeOtsu.png", new com.aspose.imaging.imageoptions.PngOptions());
} finally {
    image.dispose();
}

binarizeBradley(double brightnessDifference)

public void binarizeBradley(double brightnessDifference)

Binarization of an image using Bradley’s adaptive thresholding algorithm using the integral image thresholding

Parameters:

ParameterTypeDescription
brightnessDifferencedoubleThe brightness difference between pixel and the average of an s x s window of pixels centered around this pixel.

orderBlocks()

public void orderBlocks()

Orders the GIF blocks according to the GIF specification. Some GifGraphicsControlBlock may be removed for proper GIF layout.

clearBlocks()

public void clearBlocks()

Clears all the GIF blocks.

Example: The following example shows how to remove all blocks from a GIF image.

com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock firstBlock = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);
com.aspose.imaging.fileformats.gif.GifImage gifImage = new com.aspose.imaging.fileformats.gif.GifImage(firstBlock);
try {
    if (gifImage.getActiveFrame() != null) {
        System.out.println("Active frame size: " + gifImage.getActiveFrame().getSize());
    } else {
        System.out.println("Active frame is not set");
    }

    System.out.println("Clear all the blocks");
    gifImage.clearBlocks();

    if (gifImage.getActiveFrame() != null) {
        System.out.println("Active frame size: " + gifImage.getActiveFrame().getSize());
    } else {
        System.out.println("Active frame is not set");
    }
} finally {
    firstBlock.dispose();
    gifImage.dispose();
}

// The output looks like this:
// Active frame size: { Width = 100, Height = 100}
// Clear all the blocks
// Active frame is not set

insertBlock(int index, IGifBlock block)

public void insertBlock(int index, IGifBlock block)

Adds a new GIF block.

Parameters:

ParameterTypeDescription
indexintThe zero-based element, at which block will be inserted.
blockIGifBlockThe GIF block to add.

addBlock(IGifBlock block)

public void addBlock(IGifBlock block)

Adds a new GIF block.

Parameters:

ParameterTypeDescription
blockIGifBlockThe GIF block to add.

Example: The following example shows how to compose an animated GIF image from individual GIF blocks.

String dir = "c:\\temp\\";

// Create a GIF image 100 x 100 px.
// The first block is fully black by default.
com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock firstBlock = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);
com.aspose.imaging.fileformats.gif.GifImage gifImage = new com.aspose.imaging.fileformats.gif.GifImage(firstBlock);
try {
    // The first circle is red
    com.aspose.imaging.brushes.SolidBrush brush1 = new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getRed());

    // The second circle is black
    com.aspose.imaging.brushes.SolidBrush brush2 = new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getBlack());

    // Gradually increase the angle of the red arc shape.
    for (int angle = 10; angle <= 360; angle += 10) {
        com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock block = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);

        com.aspose.imaging.Graphics gr = new com.aspose.imaging.Graphics(block);
        gr.fillPie(brush1, block.getBounds(), 0, angle);

        gifImage.addBlock(block);
    }

    // Gradually increase the angle of the black arc and wipe out the red arc.
    for (int angle = 10; angle <= 360; angle += 10) {
        com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock block = new com.aspose.imaging.fileformats.gif.blocks.GifFrameBlock(100, 100);

        com.aspose.imaging.Graphics gr = new com.aspose.imaging.Graphics(block);
        gr.fillPie(brush2, block.getBounds(), 0, angle);
        gr.fillPie(brush1, block.getBounds(), angle, 360 - angle);

        gifImage.addBlock(block);
    }

    gifImage.save(dir + "animated_radar.gif");
} finally {
    firstBlock.dispose();
    gifImage.dispose();
}

removeBlock(IGifBlock block)

public void removeBlock(IGifBlock block)

Removes the GIF block.

Parameters:

ParameterTypeDescription
blockIGifBlockThe block to remove.

Note: do not forget to Dispose the block if you will not add it to some other GifImage. |

resizeProportional(int newWidth, int newHeight, int resizeType)

public void resizeProportional(int newWidth, int newHeight, int resizeType)

Performs proportional resize on the image. The proportional resize will resize each frame according to the ratio of newWidth/width and newHeight/height.

Parameters:

ParameterTypeDescription
newWidthintThe new width.
newHeightintThe new height.
resizeTypeintThe resize type.

rotate(float angle, boolean resizeProportionally, Color backgroundColor)

public void rotate(float angle, boolean resizeProportionally, Color backgroundColor)

RasterCachedMultipageImage.rotate(float, boolean, Color) image around the center.

Parameters:

ParameterTypeDescription
anglefloatThe rotation angle in degrees. Positive values will rotate clockwise.
resizeProportionallybooleanif set to true you will have your image size changed according to rotated rectangle (corner points) projections in other case that leaves dimensions untouched and only `` image contents are rotated.
backgroundColorColorColor of the background.