abpersonsetimagedataコンタクトサムネイルのみを変更し、完全な写真ではありません
-
20-09-2019 - |
質問
各連絡先の写真の周りに境界線を追加しようとしています。この境界のある画像を作成するための作業コードと、連絡先画像として設定する作業コードがあります。
if (image) {
NSData *dataRef = UIImagePNGRepresentation(image);
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
CFErrorRef error;
ret = ABPersonSetImageData(person, cfdata, &error);
if (ret) {
ret = ABAddressBookSave(addressBook, &error);
} else {
DebugLog(@"Could not write the image to the person: %@", [error description]);
}
CFRelease(cfdata);
}
私が見ている問題は、コンタクトまたは電話アプリで表示するときにサムネイルに境界のある画像が正しく表示されている間、着信に表示されるフルスクリーン画像はそうではないということです。
私はもともとはちょっとズームしているだけだと思っていたので、ボーダーサイズを試しました。私は、国境が大きなショットでまったく表示されていないことを確認しました。明白なものが足りないのですか?
編集10/9/09私はAppleとのコミュニケーションを行っていますが、これは実際にアドレス帳フレームワークのバグです。あなたがこの投稿を読んでいるなら、私はあなたを提案します Appleにバグを提出します 修正を促進するために。
解決
私はここで自分の質問に答えるつもりです。私は問題が何であるかを理解したと思うからです。連絡先にまだ画像がない場合、AbperSonsetimagedataを使用すると、サムネイルとフルサイズのショットの両方が追加されます。連絡先に既にフルサイズの画像がある場合、abpersonsetimagedataを使用すると、サムネイルのみが設定されます。
これに気付いた後、解決策は簡単です。設定する直前に写真を削除するだけです。
if (image) {
NSData *dataRef = UIImagePNGRepresentation(image);
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
CFErrorRef error;
ABPersonRemoveImageData(person, &error); // <-- clean any image first from ref
ABAddressBookSave(addressBook, &error);
ret = ABPersonSetImageData(person, cfdata, &error);
if (ret) {
ret = ABAddressBookSave(addressBook, &error);
} else {
DebugLog(@"Could not write the image to the person");
}
CFRelease(cfdata);
}
注*これにより、フルサイズの写真の正方形のバージョンが作成されます。このプロセスは、画像の上部と下部をトリミングし、320x320に設定します。しかし、それは機能しています。
編集10/9/09私はAppleとのコミュニケーションを行っていますが、これは実際にアドレス帳フレームワークのバグです。あなたがこの投稿を読んでいるなら、私はあなたを提案します Appleにバグを提出します 修正を促進するために。
所属していません StackOverflow