         return self.width / self.height
     }
 
-    func proportionalSize(for imageSize: CGSize, precision: PrecisionScheme) -> CGSize {
+    func proportionalSize(for imageSize: CGSize, precision: PrecisionScheme = .defaultPrecisionScheme) -> CGSize {
         let maximumDimension = CGFloat(maximumPixelSize(forImageSize: imageSize))
         let ratio = imageSize.aspectRatio
-        if ratio > 1.0 {
+        if ratio.isLandscape {
             return CGSize(width: precision.applied(to: maximumDimension), height: precision.applied(to: maximumDimension / ratio))
         } else {
             return CGSize(width: precision.applied(to: ratio * maximumDimension), height: precision.applied(to: maximumDimension))

    static var unconstrained: CGFloat {
        infinity
    }
}

public extension CGSize {

    /// Rounding scheme that should match Image I/O's behavior when loading images using `CGImageSourceCreateThumbnailAtIndex()`,
    /// providing a scaled target size via the `kCGImageSourceThumbnailMaxPixelSize` option.
    ///
    /// Unfortunately this is not explicitly documented, but has been observed to match `.rounded`, which is returned here.
    ///
    public static var imageIOMaxPixelSizePrecisionScheme: PrecisionScheme {
        return .rounded
    }

    /// Default precision scheme to use. Returns `.imageIOMaximumPixelDimensionPrecisionScheme`.
