2014-12-21 57 views
0

我試圖模仿什麼Celebrity Clicks確實:添加一個名人貼紙相機飼料,定位和縮放,並拍攝照片。這應該會給你一張貼有應用貼紙的照片,這就是Celebrity Click所做的。不過,我無法將相機照片與貼紙合併。這裏有幾個問題:當應用於最終的相機圖像時,貼紙的比例和位置是錯誤的,因爲從相機拍攝的圖像實際上在分辨率和尺寸方面都大於設置時實時相機提供的圖片貼上標籤。如何添加貼紙覆蓋到相機照片

這是我現在在做什麼:

[(GPUImageStillCamera *)videoCamera capturePhotoAsImageProcessedUpToFilter:selectedFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) { 
    selectedImage = [self imageByCombiningImage:processedImage withImage:celebOverlayView.imageView.image]; 
}]; 

- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage { 
UIImage *image = nil; 
CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width),   MAX(firstImage.size.height, secondImage.size.height)); 
if (UIGraphicsBeginImageContextWithOptions != NULL) { 
    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]); 
} else { 
    UIGraphicsBeginImageContext(newImageSize); 
} 
[firstImage drawInRect:cameraView.frame]; 

[firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2), 
            roundf((newImageSize.height-firstImage.size.height)/2))]; 
[secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2), 
            roundf((newImageSize.height-secondImage.size.height)/2))]; 
image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return image; 
} 

我重視前後的照片,這樣你可以看到我的問題。

攝像機設置屏幕:採用 enter image description here

照片拍攝與攝像頭的貼紙: enter image description here

我猜測,有一種更好的方式來合併兩個圖像,或者簡單地套用貼紙在給定座標的相機拍攝圖像。有什麼建議麼?

回答

1

如果您將添加視圖的相對框架保存在選取器中,然後在應用組合這兩個圖像的添加圖像時計算新框架,這是最簡單的。

這樣做的方法之一是,當拍攝照片時,將幀的所有參數分別與超視圖的寬度和高度相除,然後在嘗試合併圖像時將相同的幀座標與圖像寬度和高度相乘兩個圖像。

此外,對於你在做什麼,我建議你失去繪製圖像內容的核心圖形,而只是使用圖像視圖:使用背景圖像的大小創建圖像視圖,設置圖像,然後添加另一個圖像視圖與添加的圖像並設置框架如上所述。然後,簡單地創建視圖的屏幕截圖,然後完成圖像。這樣你就不會遇到縮放,變形等問題。

+0

所以你會建議創建一個視圖,其中包含兩個圖像:一個來自相機的圖像,一個帶有貼紙,然後從該視圖獲取上下文截圖? – damjandd

+0

是的,但您只需要2個視圖,背景圖像視圖和疊加圖像視圖。採用這種屏幕截圖與您在後臺進行的操作非常相似,並且非常適合縮放,裁剪等操作。如果需要,請注意包含視圖內容比例。 –

+0

那麼從哪個視圖我會截圖?正如你從上面的圖片中看到的那樣,當時屏幕上還有其他元素,所以我不能只用整個屏幕。 – damjandd