如何将 CorePlot 创建的图形保存为 jpg 文件

Posted

技术标签:

【中文标题】如何将 CorePlot 创建的图形保存为 jpg 文件【英文标题】:How to save a graphic created by CorePlot to a jpg file 【发布时间】:2010-11-19 16:20:24 【问题描述】:

我正在使用 CorePlot 在我的应用程序中绘制不同的图形。然后,我想将此图保存为 jpg 文件并发布到某个社交网站(例如 Twitter)。

我阅读了一些文档并了解到以下方法可能对我有用:

CGBitmapContextCreateImage:创建一个 CGImage 作为位图图形上下文的副本(即,我的图形所在的视图或整个屏幕 - 我理解对了吗?)

CGImageCreateWithImageInRect:如果需要,我可以剪掉图像的某些部分

[UIImage imageWithCGImage]:将CGImage转换为UIImage对象

UIImageJPEGRepresentation:将我的 UIImage 对象转换为 jpg NSData 对象,然后我可以将其分享到我的社交网络

    第一个问题是:我是否正确理解了为完成任务而必须执行的操作顺序?我会自己尝试一下,但我有一个问题导致第二个问题:

    如果我使用 CorePlot,我从哪里获取图形上下文信息以传递到 CGBitmapContextCreateImage?对不起,如果这是一个愚蠢的问题,但我对图形上下文并不熟悉。

非常感谢您提前提供的任何帮助!如果我在某个地方得到了所有这些,我保证会在此处发布我的代码示例。

嗯,多亏了布拉德,这真的很容易,但正如我所承诺的,我必须张贴这些台词:

CPXYGraph *graph=[[CPXYGraph alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

// setting up the graph
// ...

UIImage *newImage=[graph imageOfLayer];
NSData *newPNG=UIImagePNGRepresentation(newImage); // or you can use JPG or PDF

// For test purposes I write the file to the Documents directory, but you can do whatever you want with your new .png file
NSString *filePath=[NSString stringWithFormat:@"%@/graph.png", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];

if([newPNG writeToFile:filePath atomically:YES]) 
    NSLog(@"Created new file successfully");

【问题讨论】:

附带说明,您是否考虑过使用 png 而不是 jpg?对于计算机生成的图形(如图表)可能会更好。 【参考方案1】:

实际上,用于 Core Plot 中所有绘图元素的 CPLayer 基类有一个名为 -imageOfLayer 的类别方法,它返回您调用它的任何层的 UIImage 实例。如果您想了解这是如何实现的,请参阅框架中的 CPPlatformSpecificCategories.hCPPlatformSpecificCategories.m 文件。

只需在您的 CPGraph 实例上使用 -imageOfLayer,然后使用 UIImageJPEGRepresentation() 创建该图像的 JPEG 版本。然后,您可以使用正常方式上传该图像。

同样,有一个 -dataForPDFRepresentationOfLayer 方法返回一个 NSData 实例,其中包含层及其子层的 PDF 表示。

【讨论】:

嗨..这是可能的全图图像..我只有 320 X 460 ..可见图图像..我想要全图图像..?我怎样才能得到它...?【参考方案2】:

我对 CorePlot 了解不多。但我假设 CorePlot 提供了一个将图形呈现给自身的视图。如果 CorePlot 没有提供获取图形的UIImage 的机制,那么您可能会欺骗 CorePlot 将其绘制到您自己的位图图形上下文中,您可以从中创建一个图像对象进行保存。

这是基本方法:

1) 使用UIGraphicsBeginImageContext() 创建位图图形上下文。这也将使上下文成为“当前”上下文。您也可以使用CGBitmapContextCreate(),但您还必须使用UIGraphicsPushContext() 使其成为最新版本。

2) 调用 CorePlot 视图的 drawRect: 方法。

3) 使用UIGraphicsGetImageFromCurrentImageContext()从图形上下文中获取图像

4) 用UIGraphicsEndImageContext()清理

5) 使用 UIImageJPEGRepresentation() 将您的 Jpeg 位转换为 NSData 对象。

6) 使用 NSData 方法(或其他..)保存/上传您的 jpeg

【讨论】:

以上是关于如何将 CorePlot 创建的图形保存为 jpg 文件的主要内容,如果未能解决你的问题,请参考以下文章

怎样将matlab绘出的图形另存为高精度jpg图片?

如何将图片从图片框保存为jpg

php生成的图片如何保存为jpg

将 Java 2d 图形图像保存为 .png 文件

如何在Java中实现画图功能并在文本中显示坐标

CorePlot 中的缩放轴