Вы должны добавить дополнительный параметр для желаемого размера и масштабировать содержимое до этого размера:
func data(using fileType: NSBitmapImageRep.FileType = .png, size: CGSize,
properties: [NSBitmapImageRep.PropertyKey : Any] = [:]) -> Data {
let width = bounds.width * self.contentsScale
let height = bounds.height * self.contentsScale
let imageRepresentation = NSBitmapImageRep(bitmapDataPlanes: nil,
pixelsWide: Int(size.width), pixelsHigh: Int(size.height),
bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true,
isPlanar: false, colorSpaceName: NSColorSpaceName.deviceRGB,
bytesPerRow: 0, bitsPerPixel: 0)!
imageRepresentation.size = size
let context = NSGraphicsContext(bitmapImageRep: imageRepresentation)!
context.cgContext.scaleBy(x: size.width / width, y: size.height / height)
render(in: context.cgContext)
return imageRepresentation.representation(using: fileType,
properties: properties)!
}
С помощью этой модификации вы можете вызвать этот метод как:
let theBounds = myView.bounds
let theSize = CGSize(width: theBounds.width * 3.0, height: theBounds.height * 3.0)
let theData = myView.layer?.data(using: .png, size: theSize, properties: [:])
сохранить содержимое myView
до трехкратного увеличения исходного размера в объект данных.