|Type||Topic||Plugin||Version||macOS||Windows||Linux||Console & Web||iOS|
|class||JPEG||MBS Images Plugin||3.2||Yes||Yes||Yes||Yes||No|
Although rotating and flipping data expressed as DCT coefficients is not hard, there is an asymmetry in the JPEG format specification for images whose dimensions aren't multiples of the iMCU size. The right and bottom image edges are padded out to the next iMCU boundary with junk data; but no padding is possible at the top and left edges. If we were to flip the whole image including the pad data, then pad garbage would become visible at the top and/or left, and real pixels would disappear into the pad margins --- perhaps permanently, since encoders & decoders may not bother to preserve DCT blocks that appear to be completely outside the nominal image area. So, we have to exclude any partial iMCUs from the basic transformation.
Transpose is the only transformation that can handle partial iMCUs at the right and bottom edges completely cleanly. Mirror horizontal can flip partial iMCUs at the bottom, but leaves any partial iMCUs at the right edge untouched. Similarly mirror vertical leaves any partial iMCUs at the bottom edge untouched. The other transforms are defined as combinations of these basic transforms and process edge blocks in a way that preserves the equivalence.
The "trim" option causes untransformable partial iMCUs to be dropped; this is not strictly lossless, but it usually gives the best-looking result for odd-size images. Note that when this option is active, the expected mathematical equivalences between the transforms may not hold. (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim followed by -rot 180 -trim trims both edges.)
We also offer a "force to grayscale" option, which simply discards the chrominance channels of a YCbCr image. This is lossless in the sense that the luminance channel is preserved exactly. It's not the same kind of thing as the rotate/flip transformations, but it's convenient to handle it as part of this package, mainly because the transformation routines have to be aware of the option to know how many components to work on.
Bases on libjpeg.
- 3 events
- 19 properties
- property CopyOption as Integer
- property DebugLevel as Integer
- property ErrorCode as Integer
- property ErrorMessage as String
- property Grayscale as Boolean
- property InputFile as Folderitem
- property MaxMemoryToUse as Integer
- property MirrorHorizonal as Boolean
- property MirrorVertical as Boolean
- property OptimizeCoding as Boolean
- property OutputFile as Folderitem
- property Progressive as Boolean
- property Rotate180 as Boolean
- property Rotate270 as Boolean
- property Rotate90 as Boolean
- property Transpose as Boolean
- property Transverse as Boolean
- property Trim as Boolean
- property WarningMessage as String
- 2 methods
This class has no sub classes.
Some examples which use this class:
The items on this page are in the following plugins: MBS Images Plugin.
MBS Xojo Plugins