Zufällige Bilder auswählen mit UIImagePicker

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zufällige Bilder auswählen mit UIImagePicker

    Hallo zusammen,

    ist es möglich mit dem UIImagePickerController ohne Benutzerinteraktion zufällig mehrere Bilder aus der Bibliothek des Gerätes auszuwählen und wenn ja wie?
    Wenn nein, gibt es andere Möglichkeiten ?

    Danke und Grüße

    der Kalle
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Das ist von Apple so nicht vorgesehen.

    Du musst den Nutzer darum bitten, dass er einmal von Hand alle seine Bilder in deine Anwendung importiert. Dann kannst du Kopien der Bilder irgendwo ablegen, wo du Zugriff hast. Später kannst du dann natürlich problemlos zufällig welche davon auswählen.
  • Gibts denn eine Möglichkeit wie ich alle Bilder auf einmal "freigeben" lassen kann ? Oder muss der User tatsächlich jedes Bild einzeln freigeben ?
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Dank der iOS4er SW geht das mitlerweile relativ einfach ;)
    Hier mal ein Codebeispiel das alle Bilder in der Photo Bib. ausliest:

    Quellcode

    1. assets = [[NSMutableArray alloc] init];
    2. ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    3. NSUInteger groupTypes = ALAssetsGroupSavedPhotos;
    4. void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    5. if(result != NULL) {
    6. NSLog(@"See Asset: %@", result);
    7. [assets addObject:result];
    8. if ([assets count] == [totalImagesFromAssetGroup intValue]) {
    9. // ALLE BILDER WURDEN AUSGELESEN! Nun kannst du die GUI oder sonstwas refreshen
    10. }
    11. }
    12. };
    13. ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
    14. if (group){
    15. [group setAssetsFilter:[ALAssetsFilter allPhotos]];
    16. totalImagesFromAssetGroup = [NSNumber numberWithInt:[group numberOfAssets]];
    17. [group enumerateAssetsUsingBlock:assetEnumerator];
    18. }
    19. };
    20. ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {
    21. NSString *errorTitle = [error localizedDescription];
    22. NSString *errorMessage = [error localizedRecoverySuggestion];
    23. NSString *errorFailureDesc = [error localizedFailureReason];
    24. NSLog(@"Error: %@, Suggestion: %@, Failure desc: %@", errorTitle, errorMessage, errorFailureDesc);
    25. };
    26. //Hier beginnt der Zugriff auf deine Library!
    27. [assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:failureBlock];
    Alles anzeigen


    Was passiert hier?
    1. Du gehst deine gesamte Image Lib durch und erstellst eine ALAssetsGroup.
    2. Diese Gruppe enthält nur ALAsset's die zu deinem FIlter passen (hier: [ALAssetsFilter allPhotos])
    3. Anschließend wird über [group enumerateAssetsUsingBlock:assetEnumerator]; jedes Gruppenelement durch den Block assetEnumerator (ganz oben definiert) gejagt und dort in den assets Array gepackt (den du in deiner Header Datei noch anlegen musst!)
    4. Nun kannst du diesem per PRNG einfach ein paar Einträge entlocken - Jedes ALAsset enthält Informationen zu einem Bild (Bild, Metainfos, verschiedene Bildversionen etc)

    Anschließend kannst du über diesen die Bilder auslesen, zb so:


    Quellcode

    1. ALAsset *actAsset = [assets objectAtIndex:5]; //Vorrausetzung natürlich das mindestens 6 Bilder in deiner Image Library vorhanden sind!!!
    2. UIImage *bigOne = [UIImage imageWithCGImage:myImageDest scale:[[actAsset defaultRepresentation] scale] orientation:[[actAsset defaultRepresentation] orientation]];
    3. UIImage *thumb = [UIImage imageWithCGImage:[actAsset thumbnail]];




    Hoffe das hilft! Für mich war es zu beginn auch recht verwirrend! Ich empfehle dir auch die Doku: "A Short Practical Guide to Blocks"!!!

    Grüße
    Dennis
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"
  • Hi und danke für das Beispiel, aaaaaber

    das soll eine Anwendung fürs iPad werden, ergo nur 3.2 (derzeit). Gibts denn nicht andere Wege ?
    Zur Zeit bastel ich grade den ImagePicker in die App damit der User die zu nutzenden Bilder für die Anwendung auswählen kann. Finde ich aber sehr mühsam in der Anwendung wenn jemand zum Beispiel 500 oder mehr Bilder hat ist derjenige erstmal eine Weile damit beschäftigt die Bilder "freizugeben" bevor er die Anwendung nutzen kann.
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Hi Ranseia,
    leider muss ich dich enttäuschen! iOS3.x stellt nur den ImagePicker zur Verfügung um die Bilder zu erhalten. Auch ist ein Multiselect leider nicht möglich und erst mit der ALAssetsLibrary realisierbar.

    Kleiner Tip: Evtl. als Zusatzoption einen WiFi-Image Upload implementieren, so dass deine App einfach per Rechner über wlan mit Bildern befüttert werden kann.

    Ich persönlich hätte nicht unbedingt Lust 500x den ImagePicker zu bedienen ;)
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"
  • Danke für die Hilfe, ich denke ich werde mir dann einen für beide Seiten praktikablen Weg einfallen lassen.

    der Kalle
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Hallo zusammen...

    ich hatte jetzt eine recht lange Strecke ohne Verständnisschwierigkeiten... die endeten jäh mit 4.2 fürs iPad. :(
    Grundsätzlich eine feine Sache die Einführung von 4.2 wenn denn da nicht einige Dinge wären mit denen ich nicht zurecht komme.

    /* CryOn */
    Ich will den UIImagePickerControllerMediaURL-Key wieder in der - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    /* CryOff */

    Ich habe, nachdem oben genannter Key nicht mehr verfügbar ist, umgebaut auf den UIImagePickerControllerReferenceURL-Key, dadurch habe ich zu mindest die assets-url. Ich würde mit Hilfe der assets-URL gern ein CGImageRef erzeugen. Hab aber leider keinen Plan wie und steige auch nicht so wirklich durch die Infos von Apple.

    Vielleicht hat jemand ein wenig Code und eine gute Erklärung für mich übrig.

    Danke im Voraus

    der Kalle
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".