gpt4 book ai didi

ios - 如何上传这张照片?

转载 作者:行者123 更新时间:2023-11-29 12:27:11 25 4
gpt4 key购买 nike

我想在我的应用程序中使用下面列出的两种 objective c 方法。第一种方法将 UIImagePicker 照片上传到本地服务器。

// I would still like to use this method structure but with the `AVCam` classes.
-(void)uploadPhoto {
//upload the image and the title to the web service
[[API sharedInstance] commandWithParams:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"upload", @"command", UIImageJPEGRepresentation(photo.image,70), @"file", fldTitle.text, @"title", nil] onCompletion:^(NSDictionary *json) {
//completion
if (![json objectForKey:@"error"]) {
//success
[[[UIAlertView alloc]initWithTitle:@"Success!" message:@"Your photo is uploaded" delegate:nil cancelButtonTitle:@"Yay!" otherButtonTitles: nil] show];

} else {
//error, check for expired session and if so - authorize the user
NSString* errorMsg = [json objectForKey:@"error"];
[UIAlertView error:errorMsg];
if ([@"Authorization required" compare:errorMsg]==NSOrderedSame) {
[self performSegueWithIdentifier:@"ShowLogin" sender:nil];
}
}
}];
}

我想添加第二种方法:第二种方法使用 AVCam 执行 IBAction 图片快照,但我将其更改为 void 以使用 启动 View 加载>[ self snapStillImage]

编辑

- (IBAction)snapStillImage:(id)sender
{
dispatch_async([self sessionQueue], ^{
// Update the orientation on the still image output video connection before capturing.
[[[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] videoOrientation]];
// Flash set to Auto for Still Capture
[ViewController5 setFlashMode:AVCaptureFlashModeAuto forDevice:[[self videoDeviceInput] device]];
// Capture a still image.
[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:[[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[[[ALAssetsLibrary alloc] init] writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:nil];
//
photo = [[UIImage alloc] initWithData:imageData];

}
}];
});
}

有人可以通过 AVCam 设置 photo 吗?至少让我开心一下,并开始就 AVFoundation 及其适当的类进行对话,以解决此类问题。

附加信息:avcam 方法只是此 https://developer.apple.com/library/ios/samplecode/AVCam/Introduction/Intro.html 的摘录

@Aksh1t 我想用 AVFoundation 快照的原始内容设置一个名为 UIImage 的图像。不是 UIImagePicker。下面是使用 UIImagePicker 设置 socket 的方法。

#pragma mark - Image picker delegate methods
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
// Resize the image from the camera
UIImage *scaledImage = [image resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(photo.frame.size.width, photo.frame.size.height) interpolationQuality:kCGInterpolationHigh];
// Crop the image to a square (yikes, fancy!)
UIImage *croppedImage = [scaledImage croppedImage:CGRectMake((scaledImage.size.width -photo.frame.size.width)/2, (scaledImage.size.height -photo.frame.size.height)/2, photo.frame.size.width, photo.frame.size.height)];
// Show the photo on the screen
photo.image = croppedImage;
[picker dismissModalViewControllerAnimated:NO];
}

之后我只想使用我发布的第一种方法上传它。抱歉不清楚。我基本上想在我的新应用程序中执行此操作(我不清楚是什么应用程序)。

  1. 使用 AVCam 拍照
  2. 将该照片设置为名为 photo 的 UIImageView IBOutlet
  3. 上传照片(原始AVCam照片)到服务器

基本框架如上,有问题我来解答

最佳答案

snapStillImage 方法中的以下代码行将照片放入 imageData 变量中。

NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];

接下来,您将像这样从这些数据创建一个 UIImage 对象

UIImage *image = [[UIImage alloc] initWithData:imageData];

代替上面的代码,创建一个全局变量 UIImage *photo;,并在 snapStillImage 获取这样的照片

photo = [[UIImage alloc] initWithData:imageData];

由于 photo 是一个全局变量,您可以在 uploadPhoto 方法中使用它并将其发送到您的服务器。

希望这对您有所帮助,如果您有任何问题,请在评论中留下。


编辑:

因为您的文件中已经有一个 IBOutlet UIImageView *photo;,您甚至不需要全局变量来存储 UIImage。您只需在 snapStillImage 方法中替换以下行:

UIImage *image = [[UIImage alloc] initWithData:imageData];

用这条线

photo.image = [[UIImage alloc] initWithData:imageData];

关于ios - 如何上传这张照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711312/

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