Das AddressBook-Framework stellt ABPersonCopyImageData bereit, um das Kontaktbild für jeden Adressbucheintrag abzurufen. Dies ist ideal für die Bilddaten, aber der Benutzer kann auch das Bild für Framing-Zwecke zuschneiden und zuschneiden. Wenn ich die Bilddaten erhalte, bekomme ich das vollständige Bild und nicht das beschnittene Bild. Wie bekomme ich den Rahmen, den der Benutzer verwendet hat, um das Bild zu beschneiden (oder stattdessen, wie bekomme ich Zugang zu den beschnittenen Bildern/Daten)?Wie bekomme ich den Beschneidungsrahmen der Adressbuch-Bilddaten?
Antwort
In gewissem Maße ist es ein Fehler in iOS4. Zuvor hat die Adressbuch-API beschnittene Daten zurückgegeben und in iOS4 die gesamten Bilddaten zurückgegeben. Manche Leute wollen einen, manche wollen den anderen. Ich neige dazu, zu denken, dass die ganzen Bilddaten ohne den Ausschnittrahmen nutzlos sind, also hoffentlich wird das behoben ...
Ich denke, dass es unmöglich ist, die Ernte richtig zu bekommen. Die Schnittdaten werden in der sqlite-Datenbank gespeichert, die vom Adressbuch verwaltet wird. Die Anwendung des Clients kann jedoch die sqlite-Datenbank einer anderen Anwendung gemäß der Sandbox-Struktur nicht lesen.
iOS 4.1 fügt eine neue Methode hinzu: ABPersonCopyImageDataWithFormat
in ABPerson
.
Ich verwende es wie folgt aus:
NSData *imageData = [(NSData *)ABPersonCopyImageDataWithFormat(recordRef, kABPersonImageFormatThumbnail) autorelease];
Die Formate erlaubt sind:
kABPersonImageFormatThumbnail
kABPersonImageFormatOriginalSize
Auf diese Weise können Sie das Originalbild oder das beschnittene Bild (Thumbnail) erhalten.
Frameworks sind keine Apps. "Sandboxing" ist weitgehend nur prozess-/UID-basiert. Es stellt sich jedoch heraus, dass /var/mobile/Library/AddressBook/AddressBookImages.sqlitedb lesbar ist, so dass es möglich sein sollte, das Crop-Rect-out zu erhalten, auch wenn es als "privat" betrachtet werden könnte. –
Wenn die SQLite-Datenbank abgefragt werden könnte, dann können so viele Dinge gelöst werden. So etwas wie benutzerdefinierte Labels, das Crop-Rect-Problem hier und das Store (ABStore) -Problem vor iOS SDK 4.0, ... etc. Mein Partner hatte es versucht und er sagte, dass es keine Befehle auf der SQL-Datenbank ausführen kann, die von Addressbook Framework verwaltet wird. Vielleicht kannst du es noch einmal versuchen. – AechoLiu