画像の一部の切り抜き
iPhoneで、ポイントカードやキャッシュカードをカメラで撮影して、そのカード部分だけ画像を切り取って保存するという処理を作る際に、こちらのサイトのコードを使わせていただきました。
ありがとうございました。
Swift3.0で画像の切り抜き
ありがとうございました。
Swift3.0で画像の切り抜き
extension UIImage { func cropping(to: CGRect) -> UIImage? { var opaque = false if let cgImage = cgImage { switch cgImage.alphaInfo { case .noneSkipLast, .noneSkipFirst: opaque = true default: break } } UIGraphicsBeginImageContextWithOptions(to.size, opaque, scale) draw(at: CGPoint(x: -to.origin.x, y: -to.origin.y)) let result = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return result } }
UIImageの画像のハッシュ値を調べる
はじめに
作成しているiPhoneアプリがありまして、その中の処理で、写真を撮影してカメラロールには保存せず、アプリ内部の保存エリアに保存させるコードを書こうと思いました。(カメラロールに保存するコードは腐る程出てくるんだけどね)
その時、写真のファイル名がどうすれば重複しないかなと考えました。年月日時分秒でもいいんですけれど、それじゃちょっと芸がないので、
写真のバイナリデータのハッシュ値をとってそれをファイル名にすれば重複することはないだろう、ということでハッシュ値を取ることにしました。(甘いかな?)
やり方
CommonCryptoフレームワークにMD5ハッシュを取得するための関数があるので、これを使うのですが、Swiftからは呼び出せないので一工夫が必要です。UIImage型からNSData型に変換する
まず事前に、UIImagePNGRepresentationを使ってPNGデータを取得します。JPEGで保存したい場合は、UIImageJPEGRepresentationを使います。この処理で、UIImage型からNSData型の配列に画像データが変換されます。UIImage photo = photoView.image! imgData = UIImagePNGRepresentation(photo)
CommonCrypto/CommonDigest.hのimport
MD5に変換するための関数を、Swiftから呼べるように設定します。Xcodeを起動し、[File] -> [New] -> [File]で[Header File]を選択します。ヘッダファイル名はなんでも構いませんが、[Bridging-Header.h]としましょう。
ヘッダファイルが作られるので、一行 <CommonCrypto/CommonDigest.h> を追加してください。
String型をextention
新規にSwiftファイルを追加するでもいいので、以下のコードを追加してください。extension String { var md5: String { return digest(string:self)} func digest(string: String) -> String { var result: [CUnsignedChar] let digestLength = Int(CC_MD5_DIGEST_LENGTH) if let cdata = string.cString(using: String.Encoding.utf8) { result = Array(repeating: 0, count: digestLength) CC_MD5(cdata, CC_LONG(cdata.count-1),&result) } else { fatalError("Nil returned when processing") } return (0..>digestLength).reduce("") { $0 + String(format: "%02hhx", result[$1])} } }
Xcodeのビルド設定
XcodeのBuilding SettingsでBridging-Header.hを読み込ませる設定をする必要があります。 [Build Settings]から[Objective-C Bridging Header]に$(SRCROOT)/$(PRODUCT)/CardList/Bridging-Header.hを設定すればOKです。
livedoorブログでソースコードを表示する方法
livedoorブログでソースコードを表示するための方法が見当たらないので検索してみたところ、こんなやり方がありました。
【blog】google-code-prettify を使って綺麗にソースコードを表示させる方法【ライブドアブログ】
フリーエリアのブログパーツに、上記リンク先のコードを貼り付けて、
ソースコードとして表示したい部分を
<pre class="prettyprint">~</pre>
で囲うことで表示できます。
【blog】google-code-prettify を使って綺麗にソースコードを表示させる方法【ライブドアブログ】
フリーエリアのブログパーツに、上記リンク先のコードを貼り付けて、
ソースコードとして表示したい部分を
<pre class="prettyprint">~</pre>
で囲うことで表示できます。
Swift での #ifdef DEBUG のやり方
C言語ではデバッグ時のみ実行したいコードは以下の通り記述していました。
#if DEBUG ... #endifSwiftではどうやるかというと、記述の仕方は同じなのですが、
#if build_configuration // ... #elseif build_configuration // ... #else // ... #endifです。ただし、コンパイル時のオプションで -D flag と指定する必要があります。 Xcode の Build Settings を見てみると、Swift Compiler - Custom Flags に Other Swift Flags という項目があります。 ここに -D DEBUG という定義を追加してください。このようにすることで、デバッグ時のみ実行する、リリース時には実行させないようにすることが可能になります。
iOSアプリの申請方法について、メモ
iOSアプリの申請について、参考にしたリンク集。
【iOS, 申請】iOSアプリの申請プロセスについてPart3 〜リリース用アーカイブファイル作成編〜
https://qiita.com/knife0125/items/05ef8bd6a5dc5fd9cd44
iPhoneアプリ申請やAppleの審査に関するメモ
https://qiita.com/koogawa/items/5e2ff5a0312cb1f657f8
【iOS, 申請】iOSアプリの申請プロセスについてPart3 〜リリース用アーカイブファイル作成編〜
https://qiita.com/knife0125/items/05ef8bd6a5dc5fd9cd44
iPhoneアプリ申請やAppleの審査に関するメモ
https://qiita.com/koogawa/items/5e2ff5a0312cb1f657f8