如何将NSImage保存为某个目录中的新文件(png,jpg,...)?
我看到有时NSImage大小不是真正的大小(有一些图片)而且CIImage大小总是真实的.我正在测试这个图像.
这是我为测试编写的源代码:
NSImage *_imageNSImage = [[NSImage alloc]initWithContentsOfFile:@"<path to image>"];
NSSize _dimensions = [_imageNSImage size];
[_imageNSImage release];
NSLog(@"Width from CIImage: %f",_dimensions.width);
NSLog(@"Height from CIImage: %f",_dimensions.height);
NSURL *_myURL = [NSURL fileURLWithPath:@"<path to image>"];
CIImage *_imageCIImage = [CIImage imageWithContentsOfURL:_myURL];
NSRect _rectFromCIImage = [_imageCIImage extent];
NSLog(@"Width from CIImage: %f",_rectFromCIImage.size.width);
NSLog(@"Height from CIImage: %f",_rectFromCIImage.size.height);
Run Code Online (Sandbox Code Playgroud)
输出是:
那怎么可能?也许我做错了什么?
我正在对图像进行一些操作,在完成之后,我想将图像保存为磁盘上的PNG.我正在做以下事情:
+ (void)saveImage:(NSImage *)image atPath:(NSString *)path {
[image lockFocus] ;
NSBitmapImageRep *imageRepresentation = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0.0, 0.0, image.size.width, image.size.height)] ;
[image unlockFocus] ;
NSData *data = [imageRepresentation representationUsingType:NSPNGFileType properties:nil];
[data writeToFile:path atomically:YES];
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,但问题出在视网膜mac上,如果我打印NSBitmapImageRep对象,我得到一个不同的大小和像素rect,当我的图像保存在磁盘上时,它的大小是两倍:
$0 = 0x0000000100413890 NSBitmapImageRep 0x100413890 Size={300, 300} ColorSpace=sRGB IEC61966-2.1 colorspace BPS=8 BPP=32 Pixels=600x600 Alpha=YES Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x100414830>
Run Code Online (Sandbox Code Playgroud)
因为我想要保留原始大小,我强制像素大小不要关心视网膜比例:
imageRepresentation.pixelsWide = image.size.width;
imageRepresentation.pixelsHigh = image.size.height;
Run Code Online (Sandbox Code Playgroud)
这次我在打印NSBitmapImageRep对象时得到了正确的大小,但是当我保存文件时,我仍然遇到同样的问题:
$0 = 0x0000000100413890 NSBitmapImageRep 0x100413890 Size={300, 300} ColorSpace=sRGB IEC61966-2.1 colorspace BPS=8 BPP=32 Pixels=300x300 Alpha=YES Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x100414830>
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题,并保留原始像素大小?
macos nsimage image-resizing nsbitmapimagerep retina-display
我正在尝试在CoreGraphics中处理图像,然后将处理后的图像返回到NSImage
保存和显示.我有足够的资源来介绍如何在iOS中执行这些功能,但是辅助方法似乎缺失了NSImage
.在iOS中,类方法是imageWithCGImage:
,如何在Mac OS中执行此操作?
我NSBitmapImageRep
是W
X H
的大小.我创造NSImage
并做addRepresentation:
.然后我需要调整大小NSImage
.我试过setSize
方法,但它不起作用.我该怎么办?
我使用下面的代码来获取NSImage的宽度和高度:
NSImage *image = [[[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:s]] autorelease];
imageWidth=[image size].width;
imageHeight=[image size].height;
NSLog(@"%f:%f",imageWidth,imageHeight);
Run Code Online (Sandbox Code Playgroud)
但有时候imageWidth
,imageHeight
不会返回正确的值.例如,当我读取图像时,EXIF信息显示:
PixelXDimension = 2272;
PixelYDimension = 1704;
Run Code Online (Sandbox Code Playgroud)
但是imageWidth,imageHeight输出
521:390
Run Code Online (Sandbox Code Playgroud) 有没有办法在NSButtons或其他可可界面元素中绘制像图像的NSImage?
以下是示例:
Apple使用带有黑色图标的pdf:
我有一组描述图像名称,大小和X/Y位置的对象.该集合按"图层"排序,因此我可以用一种画家的算法合成图像.
由此,我可以确定保存所有图像所需的矩形,所以现在我想要做的是:
在iPhoneOS中,这是执行我想要的代码:
UIGraphicsBeginImageContext (woSize);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor clearColor] set];
CGContextFillRect(ctx, NSMakeRect(0, 0, woSize.width, woSize.height));
// draw my various images, here.
// i.e. Various repetitions of [myImage drawAtPoint:somePoint];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是如何在Desktop Cocoa/NS中做到这一点.
谢谢!
有一种简单的方法可以在10.5中运行吗?
在10.6中,我可以使用nsImage CGImageForProposedRect:NULL上下文:NULL提示:NULL
如果我不使用1b黑白图像(如Group 4 TIFF),我可以使用位图,但cgbitmaps似乎不喜欢这种设置...有没有一般的方法这样做?
我需要这样做,因为我有一个看似只想添加CGImages的IKImageView,但我所拥有的只是NSImages.目前,我正在使用一个私有的setImage:(NSImage*)方法,我真的不会使用...
我正在写一个基于iOS应用程序的Mac应用程序.下面的代码将UIImage转换为NSData以上传到Parse.com.
我想为Mac做同样的事情,但我似乎无法将其转换为NSData.我该怎么办?
谢谢
var image = UIImage(named: "SmudgeInc")
let imageData = UIImagePNGRepresentation(image)
let imageFile = PFFile(name:"image.png", data:imageData)
Run Code Online (Sandbox Code Playgroud) nsimage uiimage nsdata uiimagepngrepresentation parse-platform