120 lines
4.4 KiB
Objective-C
120 lines
4.4 KiB
Objective-C
//
|
|
// RNImageUtils.m
|
|
// RCTCamera
|
|
//
|
|
// Created by Joao Guilherme Daros Fidelis on 19/01/18.
|
|
//
|
|
|
|
#import "RNImageUtils.h"
|
|
|
|
@implementation RNImageUtils
|
|
|
|
+ (UIImage *)generatePhotoOfSize:(CGSize)size
|
|
{
|
|
CGRect rect = CGRectMake(0, 0, size.width, size.height);
|
|
UIImage *image;
|
|
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
|
|
UIColor *color = [UIColor blackColor];
|
|
[color setFill];
|
|
UIRectFill(rect);
|
|
NSDate *currentDate = [NSDate date];
|
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
|
[dateFormatter setDateFormat:@"dd.MM.YY HH:mm:ss"];
|
|
NSString *text = [dateFormatter stringFromDate:currentDate];
|
|
NSDictionary *attributes = [NSDictionary dictionaryWithObjects: @[[UIFont systemFontOfSize:18.0], [UIColor orangeColor]]
|
|
forKeys: @[NSFontAttributeName, NSForegroundColorAttributeName]];
|
|
[text drawAtPoint:CGPointMake(size.width * 0.1, size.height * 0.9) withAttributes:attributes];
|
|
image = UIGraphicsGetImageFromCurrentImageContext();
|
|
UIGraphicsEndImageContext();
|
|
return image;
|
|
}
|
|
|
|
+ (UIImage *)cropImage:(UIImage *)image toRect:(CGRect)rect
|
|
{
|
|
CGImageRef takenCGImage = image.CGImage;
|
|
CGImageRef cropCGImage = CGImageCreateWithImageInRect(takenCGImage, rect);
|
|
image = [UIImage imageWithCGImage:cropCGImage scale:image.scale orientation:image.imageOrientation];
|
|
CGImageRelease(cropCGImage);
|
|
return image;
|
|
}
|
|
|
|
+ (UIImage *)mirrorImage:(UIImage *)image
|
|
{
|
|
UIImageOrientation flippedOrientation = UIImageOrientationUpMirrored;
|
|
switch (image.imageOrientation) {
|
|
case UIImageOrientationDown:
|
|
flippedOrientation = UIImageOrientationDownMirrored;
|
|
break;
|
|
case UIImageOrientationLeft:
|
|
flippedOrientation = UIImageOrientationRightMirrored;
|
|
break;
|
|
case UIImageOrientationUp:
|
|
flippedOrientation = UIImageOrientationUpMirrored;
|
|
break;
|
|
case UIImageOrientationRight:
|
|
flippedOrientation = UIImageOrientationLeftMirrored;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
UIImage * flippedImage = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:flippedOrientation];
|
|
return flippedImage;
|
|
}
|
|
|
|
+ (NSString *)writeImage:(NSData *)image toPath:(NSString *)path
|
|
{
|
|
[image writeToFile:path atomically:YES];
|
|
NSURL *fileURL = [NSURL fileURLWithPath:path];
|
|
return [fileURL absoluteString];
|
|
}
|
|
|
|
+ (UIImage *) scaleImage:(UIImage*)image toWidth:(NSInteger)width
|
|
{
|
|
width /= [UIScreen mainScreen].scale; // prevents image from being incorrectly resized on retina displays
|
|
float scaleRatio = (float) width / (float) image.size.width;
|
|
CGSize size = CGSizeMake(width, roundf(image.size.height * scaleRatio));
|
|
|
|
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
|
|
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
|
|
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
|
|
UIGraphicsEndImageContext();
|
|
return [UIImage imageWithCGImage:[newImage CGImage] scale:1.0 orientation:(newImage.imageOrientation)];
|
|
}
|
|
|
|
+ (UIImage *)forceUpOrientation:(UIImage *)image
|
|
{
|
|
if (image.imageOrientation != UIImageOrientationUp) {
|
|
UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
|
|
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
|
|
image = UIGraphicsGetImageFromCurrentImageContext();
|
|
UIGraphicsEndImageContext();
|
|
}
|
|
return image;
|
|
}
|
|
|
|
|
|
+ (void)updatePhotoMetadata:(CMSampleBufferRef)imageSampleBuffer withAdditionalData:(NSDictionary *)additionalData inResponse:(NSMutableDictionary *)response
|
|
{
|
|
CFDictionaryRef exifAttachments = CMGetAttachment(imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
|
|
NSMutableDictionary *metadata = (__bridge NSMutableDictionary *)exifAttachments;
|
|
metadata[(NSString *)kCGImagePropertyExifPixelYDimension] = response[@"width"];
|
|
metadata[(NSString *)kCGImagePropertyExifPixelXDimension] = response[@"height"];
|
|
|
|
for (id key in additionalData) {
|
|
metadata[key] = additionalData[key];
|
|
}
|
|
|
|
NSDictionary *gps = metadata[(NSString *)kCGImagePropertyGPSDictionary];
|
|
|
|
if (gps) {
|
|
for (NSString *gpsKey in gps) {
|
|
metadata[[@"GPS" stringByAppendingString:gpsKey]] = gps[gpsKey];
|
|
}
|
|
}
|
|
|
|
response[@"exif"] = metadata;
|
|
}
|
|
|
|
@end
|
|
|