A "kawaii" iOS selfie app that detects faces and makes the eyes larger — turning ordinary photos into wide-eyed, doll-like portraits.
- Eye detection — uses Core Image
CIDetector(CIDetectorTypeFace, high accuracy) to locate faces and per-eye positions, skipping eyes that are detected as closed. - Eye-enlargement effects — applies a partial-region zoom or a fish-eye (spherical) warp around each detected eye, then blends the result back with an alpha mask for a seamless edge.
- Effect menu — selectable presets shown in a collection view, each with a hand-drawn Bézier-path eye icon:
do nothing— original image, no effectclearly— sharpen / high-contrast eyes at 1.0xbig/bigger/biggest— natural-eye enlargement at 1.20x / 1.35x / 1.50xbright— fish-eye spherical enlargement for a "brilliant", sparkly look
- Image input — capture from the camera (
SACameraPickerViewController) or pick from the photo library (UIImagePickerController), with iPad-specific fallback via the AssetsLibrary reference URL. - In-app purchase — a "BasicPack" unlocks the stronger effects (
bigger,biggest,bright); locked items render a FontAwesome lock glyph. Purchase and restore are handled through CargoBay, with the purchase flag stored viaSecureNSUserDefaults. - Sharing — share processed images to Twitter, Facebook, and LINE via custom
UIActivitysubclasses, with a localized promo caption. - Localization — English and Japanese (
en.lproj,ja.lproj). - Marketing / analytics — rating prompts (iRate), tell-a-friend (iTellAFriend), and Google Analytics event tracking.
This is a CocoaPods project that opens through an Xcode workspace, not the bare project file.
# Install dependencies (Pods/ is gitignored and not committed)
pod install
# Open the workspace — NOT DeCamera.xcodeproj
open DeCamera.xcworkspaceThen build and run the DeCamera scheme onto a physical iOS device (iOS 8.1+).
Notes:
- A physical device is required — the camera capture path logs a warning and no-ops on the Simulator, and face detection needs a real photo.
- The dependency versions pinned in
Podfile/Podfile.lockare from circa 2014–2017; resolving them against today's CocoaPods spec repo and a modern Xcode/iOS SDK will likely require updates.
DeCamera/
├── Podfile / Podfile.lock # CocoaPods dependency manifest
├── PrefixHeader.pch # UIKit/Foundation + CocoaLumberjack log-level setup
├── DeCamera.xcworkspace # open this (CocoaPods workspace)
├── DeCamera.xcodeproj
└── DeCamera/
├── main.m
├── Info.plist # bundle id com.zyxw.DeCamera, portrait-only, iOS 8.1
├── Sources/
│ ├── AppDelegate.{h,m} # UI theming, IAP/analytics/iRate bootstrap, status-bar swizzle
│ ├── Index/ # IndexViewController — entry screen, camera/library pickers
│ ├── Photography/
│ │ ├── UIImage+Facial.* # CIDetector face/eye detection + per-eye effect application
│ │ └── GPUImage/ # UIImage <-> GPUImage bridging, zoom/sphere/unsharp filters
│ ├── Processing/
│ │ ├── ProcessingViewController.* # effect picker, preview, IAP unlock, save/share
│ │ ├── MenuItem.* # effect-preset model (name, selector, icon, lock state)
│ │ └── UIBezierPath+EyeIcons.* # vector eye icons for the menu
│ └── Utilities/
│ ├── Categories/ # UIImage/UIView/UIViewController/UIAlertView helpers, GA tracking
│ ├── InAppPurchase/ # CargoBay helper + IAP NSNotificationCenter category
│ └── CGGeometryAdditional.h
├── User Interface/ # Main.storyboard, LaunchScreen.xib, SelectedMarker.xib
├── Resources/ # alpha masks, title/social images
├── Images.xcassets/ # app icon
├── en.lproj/ ja.lproj/ # localized strings
- Language: Objective-C
- Platform: iOS 8.1+ (iPhone, portrait-only),
armv7 - Image processing: Core Image (
CIDetectorface detection) + GPUImage0.1.6(GPU filters: zoom, sphere/fish-eye, unsharp mask) + NYXImagesKit (masking) - Dependency manager: CocoaPods
- Key pods: GPUImage, NYXImagesKit, SACameraPickerViewController, CargoBay (StoreKit / IAP), BlocksKit, BlockInjection (method swizzling), SecureNSUserDefaults, FontAwesome-iOS, JGProgressHUD, iRate, iTellAFriend, GoogleAnalytics-iOS-SDK, AQS{Twitter,Facebook,LINE}Activity, CocoaLumberjack
- Original project name:
RapidFilter(visible in file headers; renamed to DeCamera) - Bundle identifier:
com.zyxw.DeCamera
Migrated from Bitbucket. Commit history preserved as-is.
