ParallelGifEncoder
A class for encoding GIF files. This encoder supports writing multiple frames in parallel. The dimensions of the created GIF are determined by the first frame written. Subsequent frames will have the same dimensions as the first frame, cropping or padding the frame to fit if necessary. The encoder must be closed after use to ensure all data is written correctly.
Usage:
// Obtain a Path to write the GIF data to
val path: Path = ...
val sink = SystemFileSystem.sink(path).buffered()
// Use all available CPU cores for maximum encoding speed
val cpuCount: Int = ...
val encoder = ParallelGifEncoder(
sink,
maxConcurrency = cpuCount,
ioContext = Dispatchers.IO,
)
val argb1: IntArray = ...
val width1: Int = ...
val height1: Int = ...
val duration1: Duration = ...
val argb2: IntArray = ...
val width2: Int = ...
val height2: Int = ...
val duration2: Duration = ...
// Frames are encoded in parallel
// Suspending
encoder.writeFrame(argb1, width1, height1, duration1)
encoder.writeFrame(argb2, width2, height2, duration2)
// Suspending
encoder.close()Parameters
The Sink to write the GIF data to.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
The default value of 0 slightly reduces file size with no visual quality loss.
A value of around 0.01 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization after quantization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
A value of around 0.02 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The number of times the GIF should loop.
Set to 0 for infinite looping.
Set to -1 for no looping.
The maximum number of colors in each frame.
Must be between 1 and 256 inclusive.
The ColorQuantizer to use for reducing the number of colors in each frame to maxColors.
The ColorSimilarityChecker to use for determining if two frames are similar enough to merge.
An optional comment to include in the GIF comment block metadata.
The alpha threshold for a pixel to be considered transparent. Pixels with an alpha value equal to or less than this value will be treated as fully transparent.
Must be between 0 and 255 inclusive.
The solid RGB color to use for filling in pixels with partial alpha transparency, as GIFs do not support partial transparency.
Set to -1 to disable filling.
Whether to crop the transparent pixels from the edges of each frame. This can reduce the size of the GIF by a small amount.
The minimum duration for each frame in centiseconds. Setting this to a value less than 2 can result in the GIF being played slower than expected on some GIF viewers.
Must be positive.
The maximum number of frames that can be processed concurrently at the same time.
The CoroutineScope in which the concurrent encoding operations will run.
The CoroutineContext to use for writing to the sink.
A callback that is invoked after each frame is written, providing the number of frames written and the total duration of all the frames written so far. This can be used to track progress or update a UI.
Throws
If any of the parameters are invalid.
A class for encoding GIF files. This encoder supports writing multiple frames in parallel. The dimensions of the created GIF are determined by the first frame written. Subsequent frames will have the same dimensions as the first frame, cropping or padding the frame to fit if necessary. The encoder must be closed after use to ensure all data is written correctly.
Usage:
// Obtain a Path to write the GIF data to
val path: Path = ...
val sink = SystemFileSystem.sink(path).buffered()
// Use all available CPU cores for maximum encoding speed
val cpuCount: Int = ...
val encoder = ParallelGifEncoder(
sink,
maxConcurrency = cpuCount,
ioContext = Dispatchers.IO,
)
val argb1: IntArray = ...
val width1: Int = ...
val height1: Int = ...
val duration1: Duration = ...
val argb2: IntArray = ...
val width2: Int = ...
val height2: Int = ...
val duration2: Duration = ...
// Frames are encoded in parallel
// Suspending
encoder.writeFrame(argb1, width1, height1, duration1)
encoder.writeFrame(argb2, width2, height2, duration2)
// Suspending
encoder.close()Parameters
The Sink to write the GIF data to.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
The default value of 0 slightly reduces file size with no visual quality loss.
A value of around 0.01 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization after quantization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
A value of around 0.02 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The number of times the GIF should loop.
Set to 0 for infinite looping.
Set to -1 for no looping.
The maximum number of colors in each frame.
Must be between 1 and 256 inclusive.
The ColorQuantizer to use for reducing the number of colors in each frame to maxColors.
The ColorSimilarityChecker to use for determining if two frames are similar enough to merge.
An optional comment to include in the GIF comment block metadata.
The alpha threshold for a pixel to be considered transparent. Pixels with an alpha value equal to or less than this value will be treated as fully transparent.
Must be between 0 and 255 inclusive.
The solid RGB color to use for filling in pixels with partial alpha transparency, as GIFs do not support partial transparency.
Set to -1 to disable filling.
Whether to crop the transparent pixels from the edges of each frame. This can reduce the size of the GIF by a small amount.
The minimum duration for each frame in centiseconds. Setting this to a value less than 2 can result in the GIF being played slower than expected on some GIF viewers.
Must be positive.
The maximum number of frames that can be processed concurrently at the same time.
The CoroutineScope in which the concurrent encoding operations will run.
The CoroutineContext to use for writing to the sink.
A callback that is invoked after each frame is written, providing the number of frames written and the total duration of all the frames written so far. This can be used to track progress or update a UI.
Throws
If any of the parameters are invalid.
A class for encoding GIF files. This encoder supports writing multiple frames in parallel. The dimensions of the created GIF are determined by the first frame written. Subsequent frames will have the same dimensions as the first frame, cropping or padding the frame to fit if necessary. The encoder must be closed after use to ensure all data is written correctly.
Usage:
// Obtain a Path to write the GIF data to
val path: Path = ...
val sink = SystemFileSystem.sink(path).buffered()
// Use all available CPU cores for maximum encoding speed
val cpuCount: Int = ...
val encoder = ParallelGifEncoder(
sink,
maxConcurrency = cpuCount,
ioContext = Dispatchers.IO,
)
val argb1: IntArray = ...
val width1: Int = ...
val height1: Int = ...
val duration1: Duration = ...
val argb2: IntArray = ...
val width2: Int = ...
val height2: Int = ...
val duration2: Duration = ...
// Frames are encoded in parallel
// Suspending
encoder.writeFrame(argb1, width1, height1, duration1)
encoder.writeFrame(argb2, width2, height2, duration2)
// Suspending
encoder.close()Parameters
The Sink to write the GIF data to.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
The default value of 0 slightly reduces file size with no visual quality loss.
A value of around 0.01 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization after quantization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
A value of around 0.02 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The number of times the GIF should loop.
Set to 0 for infinite looping.
Set to -1 for no looping.
The maximum number of colors in each frame.
Must be between 1 and 256 inclusive.
The ColorQuantizer to use for reducing the number of colors in each frame to maxColors.
The ColorSimilarityChecker to use for determining if two frames are similar enough to merge.
An optional comment to include in the GIF comment block metadata.
The alpha threshold for a pixel to be considered transparent. Pixels with an alpha value equal to or less than this value will be treated as fully transparent.
Must be between 0 and 255 inclusive.
The solid RGB color to use for filling in pixels with partial alpha transparency, as GIFs do not support partial transparency.
Set to -1 to disable filling.
Whether to crop the transparent pixels from the edges of each frame. This can reduce the size of the GIF by a small amount.
The minimum duration for each frame in centiseconds. Setting this to a value less than 2 can result in the GIF being played slower than expected on some GIF viewers.
Must be positive.
The maximum number of frames that can be processed concurrently at the same time.
The CoroutineScope in which the concurrent encoding operations will run.
The CoroutineContext to use for writing to the sink.
A callback that is invoked after each frame is written, providing the number of frames written and the total duration of all the frames written so far. This can be used to track progress or update a UI.
Throws
If any of the parameters are invalid.
A class for encoding GIF files. This encoder supports writing multiple frames in parallel. The dimensions of the created GIF are determined by the first frame written. Subsequent frames will have the same dimensions as the first frame, cropping or padding the frame to fit if necessary. The encoder must be closed after use to ensure all data is written correctly.
Usage:
// Obtain a Path to write the GIF data to
val path: Path = ...
val sink = SystemFileSystem.sink(path).buffered()
// Use all available CPU cores for maximum encoding speed
val cpuCount: Int = ...
val encoder = ParallelGifEncoder(
sink,
maxConcurrency = cpuCount,
ioContext = Dispatchers.IO,
)
val argb1: IntArray = ...
val width1: Int = ...
val height1: Int = ...
val duration1: Duration = ...
val argb2: IntArray = ...
val width2: Int = ...
val height2: Int = ...
val duration2: Duration = ...
// Frames are encoded in parallel
// Suspending
encoder.writeFrame(argb1, width1, height1, duration1)
encoder.writeFrame(argb2, width2, height2, duration2)
// Suspending
encoder.close()Parameters
The Sink to write the GIF data to.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
The default value of 0 slightly reduces file size with no visual quality loss.
A value of around 0.01 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The tolerance for color difference used by colorSimilarityChecker when performing transparency optimization after quantization. This optimization works by making pixels that are similar to the pixel in the previous frame transparent, resulting in only pixels that are different being saved. Higher values will result in a smaller file size at the cost of visual artifacts. This optimization is most effective on animations with large static areas.
A value of around 0.02 provides a good tradeoff between file size and quality.
Set to -1 to disable transparency optimization.
The number of times the GIF should loop.
Set to 0 for infinite looping.
Set to -1 for no looping.
The maximum number of colors in each frame.
Must be between 1 and 256 inclusive.
The ColorQuantizer to use for reducing the number of colors in each frame to maxColors.
The ColorSimilarityChecker to use for determining if two frames are similar enough to merge.
An optional comment to include in the GIF comment block metadata.
The alpha threshold for a pixel to be considered transparent. Pixels with an alpha value equal to or less than this value will be treated as fully transparent.
Must be between 0 and 255 inclusive.
The solid RGB color to use for filling in pixels with partial alpha transparency, as GIFs do not support partial transparency.
Set to -1 to disable filling.
Whether to crop the transparent pixels from the edges of each frame. This can reduce the size of the GIF by a small amount.
The minimum duration for each frame in centiseconds. Setting this to a value less than 2 can result in the GIF being played slower than expected on some GIF viewers.
Must be positive.
The maximum number of frames that can be processed concurrently at the same time.
The CoroutineScope in which the concurrent encoding operations will run.
The CoroutineContext to use for writing to the sink.
A callback that is invoked after each frame is written, providing the number of frames written and the total duration of all the frames written so far. This can be used to track progress or update a UI.
Throws
If any of the parameters are invalid.
Constructors
Functions
Closes the encoder, ensuring all data is written. Closing the encoder also closes the underlying sink.
Closes the encoder, ensuring all data is written. Closing the encoder also closes the underlying sink.
Closes the encoder, ensuring all data is written. Closing the encoder also closes the underlying sink.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.
Writes a single frame to the GIF asynchronously. The frame may be skipped if the duration is below minimumFrameDurationCentiseconds, or if the frame is the same as or similar enough to the previous frame, determined by colorDifferenceTolerance, quantizedColorDifferenceTolerance, and colorSimilarityChecker.