質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1745閲覧

イメージをUserDefaultに保存するとサイズが変わってしまいます

bukubuku

総合スコア16

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/12/20 07:34

###前提・実現したいこと
iPhoneアプリ開発初心者です。編集した画像:UIImageデータをUserDefaultに永久保存していますが、保存前後で画像サイズが異なっていることに気が付きました。原因、対処法などご教授をおねがいします。

###発生している問題・エラーメッセージ
保存する前のイメージサイズが一旦、保存した後読み込むと倍の大きさに
なってしまっています。

###該当のソースコード
<swift3>

//保存する画像を設定する
let testImg = targetIView.image
print("書き込む画像サイズ: (testImg?.size.height)")

// = UserDefaultに保存する =
// [UIImage] → [NSData]
let testData: UserDefaults = UserDefaults.standard
let dataImages:Data = UIImagePNGRepresentation(testImg!)!
let testName:String = "test01"//保存名を決定
testData.set(dataImages, forKey: testName)
// = UserDefaultから読み込む =
if testData.object(forKey: testName) != nil{
let img = testData.object(forKey: testName) as! NSData
let readImg = UIImage(data:img as Data)!
print("読み込んだ画像サイズ: (readImg.size.height)")

###試したこと
上記実行結果:
書き込む画像サイズ: Optional(45.0)
読み込んだ画像サイズ: 90.0
###補足情報
書き込みイメージ:testImageは GetImage()を用いて画面の一部を
イメージ化して、targetViewに貼り付けたものです。
[OSX10.11.16 /MacBookPro]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/12/20 07:39

コードは ``` で囲ってください。
guest

回答2

0

ベストアンサー

保存前後のUIImageのscaleを調べてみて下さい。食い違っていないでしょうか?
UIImage生成時にinit(data:scale:)を使って、保存前のscaleを反映させてみて下さい。

投稿2016/12/20 07:55

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bukubuku

2016/12/20 14:26

お二人から回答をいただきましてありがとうございます。画面がretina のために起きるのですね。 保存イメージtargetImg.imageを作成時にscale:0.0で作成したのでretina:2.0が反映されています。 ご指摘のように、let readImg = UIImage(data:img as Data, scale: retina)!にすれば保存前後でサイズが同じになります。 結論として、UIImage(data:Data)はデフォルトではピクセルデータで返されると言うことですね。 今回、立ち止まって色々見直すことができました。ありがとうございました。
guest

0

以下の様な状況で同じような動きになることを確認しました。

回答としてはAssets.xcassetsの中にいれて画像を管理するようにしてください、、、ですね。

s

投稿2016/12/20 12:50

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問