如何制作 dataWithEPSInsideRect 矢量而不是矢量格式的位图?
How to make dataWithEPSInsideRect vector rather than bitmap in vector format?
您好,我正在尝试将 NSImageView 中的数据导出为 EPS 矢量,但导出的数据似乎不是矢量,而是更像是 EPS 格式的位图。
任何人都可以建议我哪里出错了以及如何将其设为矢量吗?
s = [[graphicImage image] size];
offscreen = [[NSImageView alloc] initWithFrame:NSMakeRect(0,0,s.width*10, s.height)];
[offscreen setImage:[graphicImage image]];
export = [offscreen dataWithEPSInsideRect:[offscreen bounds]];
您正在使用 NSImageView
,这是一个用于显示光栅图像的视图。它 returns 栅格数据应该不足为奇。
Quartz2D 的首选图元文件格式是 PDF。周围有一些遗留例程,可能来自 NextSTEP 的显示 postscript days,它专注于从视图和 windows.
生成 EPS
您可以尝试创建一个屏幕外视图,设置视图的绘制方法以包含您的图形,然后使用视图的 dataWithEPSInsideRect:(NSRect)rect;
方法。我不知道这是否会产生矢量图,或者只是视图内容的光栅图像。
令我好奇的是,您试图在当今时代(post-PDF 时代)生成 EPS。我记得在我使用 Macromedia FreeHand 工作的那些日子里,EPS 问题特别严重。但祝你好运!
这是使用 NSView 创建矢量 EPS 文件的 MacOS 游乐场示例:
import Cocoa
import PlaygroundSupport
class MyView : NSView {
override func draw(_ rect: CGRect) {
if let cgContext = NSGraphicsContext.current?.cgContext
{
cgContext.addRect(self.bounds.insetBy(dx: 20, dy: 20))
cgContext.strokePath()
cgContext.addEllipse(in: bounds.insetBy(dx: 40 , dy: 40))
cgContext.setFillColor(NSColor.yellow.cgColor)
cgContext.fillPath()
}
}
}
let myView = MyView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
PlaygroundSupport.PlaygroundPage.current.liveView = myView
let data = myView.dataWithEPS(inside: myView.bounds)
try data.write(to: URL.init(fileURLWithPath: "/Users/sthompson/Desktop/viewContent.eps"))
@interface MyView : NSView
@end
@implementation MyView
- (void) drawRect: (CGRect) rect
{
CGContextRef cgContext = [[NSGraphicsContext currentContext] CGContext];
CGContextSaveGState(cgContext);
CGContextAddRect(cgContext, CGRectInset(self.bounds, 20, 20));
CGContextStrokePath(cgContext);
CGContextAddEllipseInRect(cgContext, CGRectInset(self.bounds, 40, 40));
CGContextSetFillColorWithColor(cgContext, [[NSColor yellowColor] CGColor]);
CGContextFillPath(cgContext);
CGContextRestoreGState(cgContext);
}
+ (void) tryItOut {
MyView *myView = [[MyView alloc] initWithFrame: NSRectFromCGRect(CGRectMake(0, 0, 320, 480))];
NSData *data = [myView dataWithEPSInsideRect: myView.bounds];
[data writeToURL: [NSURL fileURLWithPath: @"/Users/sthompson/Desktop/sampleEPSFile.eps"] atomically: YES];
}
@end
您好,我正在尝试将 NSImageView 中的数据导出为 EPS 矢量,但导出的数据似乎不是矢量,而是更像是 EPS 格式的位图。
任何人都可以建议我哪里出错了以及如何将其设为矢量吗?
s = [[graphicImage image] size];
offscreen = [[NSImageView alloc] initWithFrame:NSMakeRect(0,0,s.width*10, s.height)];
[offscreen setImage:[graphicImage image]];
export = [offscreen dataWithEPSInsideRect:[offscreen bounds]];
您正在使用 NSImageView
,这是一个用于显示光栅图像的视图。它 returns 栅格数据应该不足为奇。
Quartz2D 的首选图元文件格式是 PDF。周围有一些遗留例程,可能来自 NextSTEP 的显示 postscript days,它专注于从视图和 windows.
生成 EPS您可以尝试创建一个屏幕外视图,设置视图的绘制方法以包含您的图形,然后使用视图的 dataWithEPSInsideRect:(NSRect)rect;
方法。我不知道这是否会产生矢量图,或者只是视图内容的光栅图像。
令我好奇的是,您试图在当今时代(post-PDF 时代)生成 EPS。我记得在我使用 Macromedia FreeHand 工作的那些日子里,EPS 问题特别严重。但祝你好运!
这是使用 NSView 创建矢量 EPS 文件的 MacOS 游乐场示例:
import Cocoa
import PlaygroundSupport
class MyView : NSView {
override func draw(_ rect: CGRect) {
if let cgContext = NSGraphicsContext.current?.cgContext
{
cgContext.addRect(self.bounds.insetBy(dx: 20, dy: 20))
cgContext.strokePath()
cgContext.addEllipse(in: bounds.insetBy(dx: 40 , dy: 40))
cgContext.setFillColor(NSColor.yellow.cgColor)
cgContext.fillPath()
}
}
}
let myView = MyView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
PlaygroundSupport.PlaygroundPage.current.liveView = myView
let data = myView.dataWithEPS(inside: myView.bounds)
try data.write(to: URL.init(fileURLWithPath: "/Users/sthompson/Desktop/viewContent.eps"))
@interface MyView : NSView
@end
@implementation MyView
- (void) drawRect: (CGRect) rect
{
CGContextRef cgContext = [[NSGraphicsContext currentContext] CGContext];
CGContextSaveGState(cgContext);
CGContextAddRect(cgContext, CGRectInset(self.bounds, 20, 20));
CGContextStrokePath(cgContext);
CGContextAddEllipseInRect(cgContext, CGRectInset(self.bounds, 40, 40));
CGContextSetFillColorWithColor(cgContext, [[NSColor yellowColor] CGColor]);
CGContextFillPath(cgContext);
CGContextRestoreGState(cgContext);
}
+ (void) tryItOut {
MyView *myView = [[MyView alloc] initWithFrame: NSRectFromCGRect(CGRectMake(0, 0, 320, 480))];
NSData *data = [myView dataWithEPSInsideRect: myView.bounds];
[data writeToURL: [NSURL fileURLWithPath: @"/Users/sthompson/Desktop/sampleEPSFile.eps"] atomically: YES];
}
@end