gpt4 book ai didi

ios - 使用 CGPath 绘制到 SVG 输出

转载 作者:可可西里 更新时间:2023-11-01 06:20:07 26 4
gpt4 key购买 nike

我用 CGPath 和 CAShapeLayer 做了一个绘画(绘图屏幕),现在我的客户想要可缩放的输出图像,我找到了 SVG Kit SVG Kit但我不知道如何使用这个库。我没有在库示例中找到和示例!有谁知道如何使用这个库将 CGPath 转换为 SVG 或者可以给我一个教程?

提前致谢!

最佳答案

您可以从寻找 at this file on GitHub 开始.它有一个将 CGPathRef 转换为 SVG 路径的 d 属性的例程。我写的。

类方法的签名是+(NSString*) svgPathFromCGPath:(CGPathRef)aPath;[更新:在下面添加了代码片段]

#import "SVGPathGenerator.h"

...

CGMutablePathRef pathToBuild = CGPathCreateMutable();
CGPathMoveToPoint(pathToBuild, nil, 10, 10);
CGPathAddQuadCurveToPoint(pathToBuild, nil, 20, 0, 30, 40);
CGPathAddCurveToPoint(pathToBuild, nil, 20, 40, 40, 30, 100, 90);
CGPathAddLineToPoint(pathToBuild, nil, 50, 100);

NSString* aDAttribute = [SVGPathGenerator svgPathFromCGPath:pathToBuild];
NSLog(@"%@",aDAttribute);

输出:M10.0 10.0Q20.0 0.0 30.0 40.0C20.0 40.0 40.0 30.0 100.0 90.0L50.0 100.0

请注意,如果添加圆弧,输出将不会有紧密的对应关系,因为 SVG 中的圆弧和 Quartz 中的圆弧的描述完全不同。

如果你想将它输出到一个简单的 SVG 文件,那么你可以这样做:

 CGRect boundingBox = CGPathGetPathBoundingBox(pathToBuild);

NSString* svgAsString = [NSString stringWithFormat:@" <?xml version=\"1.0\" encoding=\"UTF-8\"?> \
<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> \
<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewport-fill=\"none\" viewBox=\"%lf, %lf, %lf, %lf\" version=\"1.1\" height=\"%lf\" width=\"%lf\" > \
<path fill=\"none\" stroke=\"green\" d=\"%@\" /> \
</svg>",
boundingBox.origin.x, boundingBox.origin.y, boundingBox.size.width, boundingBox.size.height, boundingBox.size.height, boundingBox.size.width, aDAttribute
];

NSData* utf8Data = [svgAsString dataUsingEncoding:NSUTF8StringEncoding];
[utf8Data writeToFile:pathToFile atomically:YES];

(我没有编译这段代码)

关于ios - 使用 CGPath 绘制到 SVG 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com