我有以下代码在NSImage上绘制文本。但是,当我将其保存到磁盘时,生成的图像将被调整为较小的尺寸。
我做错了什么?请指教
func drawText(image :NSImage) ->NSImage
{
let text = "Sample Text"
let font = NSFont.boldSystemFont(ofSize: 18)
let imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
let textRect = CGRect(x: 5, y: 5, width: image.size.width - 5, height: image.size.height - 5)
let textStyle = NSMutableParagraphStyle.default().mutableCopy() as! NSMutableParagraphStyle
let textFontAttributes = [
NSFontAttributeName: font,
NSForegroundColorAttributeName: NSColor.white,
NSParagraphStyleAttributeName: textStyle
]
let im:NSImage = NSImage(size: image.size)
let rep:NSBitmapImageRep = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: Int(image.size.width), pixelsHigh: Int(image.size.height), bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSCalibratedRGBColorSpace, bytesPerRow: 0, bitsPerPixel: 0)!
im.addRepresentation(rep)
im.lockFocus()
image.draw(in: imageRect)
text.draw(in: textRect, withAttributes: textFontAttributes)
im.unlockFocus()
return im
}
这是另一种使用临时NSView
方法绘制图像和文本并将结果缓存到新图像中的方法(代码为Swift 4)。您无需处理像素的好处
class ImageView : NSView {
var image : NSImage
var text : String
init(image: NSImage, text: String)
{
self.image = image
self.text = text
super.init(frame: NSRect(origin: NSZeroPoint, size: image.size))
}
required init?(coder decoder: NSCoder) { fatalError() }
override func draw(_ dirtyRect: NSRect) {
let font = NSFont.boldSystemFont(ofSize: 18)
let textRect = CGRect(x: 5, y: 5, width: image.size.width - 5, height: image.size.height - 5)
image.draw(in: dirtyRect)
text.draw(in: textRect, withAttributes: [.font: font, .foregroundColor: NSColor.white])
}
var outputImage : NSImage {
let imageRep = bitmapImageRepForCachingDisplay(in: frame)!
cacheDisplay(in: frame, to:imageRep)
let tiffData = imageRep.tiffRepresentation!
return NSImage(data : tiffData)!
}
}
要使用它,初始化一个视图
let image = ... // get some image
let view = ImageView(image: image, text: "Sample Text")
并获得新的形象
let imageWithText = view.outputImage
注意:
根本不使用段落样式,但是如果要创建可变的段落样式,只需编写
let textStyle = NSMutableParagraphStyle()
这是我的shape_two文件,我把它放进了我的drawable文件夹。 我的问题是,当我在我的ImageViews上绘制形状时,它会被重新调整大小(改变高度和宽度)。我有不同大小的imageView和我想使用单一形状的xml绘制边框,我的imageView大小不应该改变,而这样做。谁都可以告诉我如何实现它。 在搜索了很多东西后,我才知道,我不能对它执行位图操作来根据形状重新调整它的大小,因为xm
已经建立了一个小的测试SWING应用程序,有三个面板。一个主JPanel,包含两个较小的JPanel。一个在左边(板面板),另一个在右边(侧板)。通过调用min、preferred和max size方法,两个内部面板都被设置为请求的特定大小。右面板中的一个按钮将父JFrame设置为not re-sizable。在父帧设置为不可调整大小之前,一切看起来都很好,这会导致(?!)调整框架和主面板的大小,
这里是简单的Java问题。我制作了一个自定义的JSlider,它在用户移动滑块的最后一个位置绘制方块。我们重写paintcomponent并绘制相对于滑块大小的方块。当你正确地使用滑块时,一切工作都很好。但是,当你调整框架的大小时,问题就会发生。滑块变大,滑块调节器随之移动,但是我们放置的方块相对于滑块不移动。当我们调整框架大小时,我们应该从JSlider中使用哪个函数来重新绘制? 我试图将JSl
问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则
我是一个相当新的编码,已经在它的几个小时现在一个月。在过去的几个小时里,我一直被困在我附上的两张图片中的问题上。我已经尝试了搜索答案和各种方法,如最小宽度,显示:Flex,调整字体大小从自动缩放与vw和使用REM。我只想让我的文本留在笔记本电脑屏幕内,无论屏幕大小,我正在查看它。我知道我可以使用简单的方式,只是photoshop的照片与文本,但我想学习如何做与编码为未来的项目以及。我确实想让图片缩
我的目的是绘制一个上传的图像,我不知道的尺寸在一个PDF文件的一个空页(DINA4)。对于水平图像,我有一个带有一个水平空页的PDF文件,对于垂直图像,我有一个带有一个垂直页的PDF文件。 这是我到目前为止的代码: 对于垂直图像,一切工作都很好(我更希望图像在页面的中心,但这将是下一步)。