{"id":3055,"date":"2010-04-14T09:59:39","date_gmt":"2010-04-14T07:59:39","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3055"},"modified":"2010-04-14T09:59:39","modified_gmt":"2010-04-14T07:59:39","slug":"t033salvare-immagini-da-internet-nella-nostra-applicazione","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t033salvare-immagini-da-internet-nella-nostra-applicazione\/","title":{"rendered":"T#033 &#8211; Salvare immagini da internet nella nostra applicazione"},"content":{"rendered":"<p>Salve a tutti, nel tutorial di oggi vedremo come scaricare immagini da internet per arricchire la nostra applicazione. Il mio caso era piuttosto particolare, avevo la necessit\u00e0 di scaricare delle nuove ricette, e caricarle programmaticamente all&#8217;interno del DB SQLite. La soluzione \u00e9 ricaduta nel far puntare l&#8217;applicativo all&#8217;indirizzo di un file XML su web. Il file xml (che viene parsato in SAX mode), legge i dettagli e crea un record nel DB. La ricetta per\u00f2 \u00e8 formata sia da campi testuali, che da immagini, occorreva quindi avere un modo per scaricare in background anche tali assets binari.<!--more--><\/p>\n<p>Vediamo un p\u00f2 di codice:<\/p>\n<p><em>string<\/em> contiene il nome dell&#8217;immagine es: &#8220;carbonara.png&#8221;<br \/>\n<em>imageURLString<\/em> contiene l&#8217;url dell&#8217;immagine (aggiungendo il prefisso del sito)<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nNSString *imageURLStringSito = @\"http:\/\/www.sviluppoiphoneitalia.com\/ricette_romane\/\";\r\nNSString *imageURLString = [NSString stringWithFormat: @\"%@%@\", imageURLStringSito, string]; \r\n<\/pre>\n<p>Creiamo ora un NSURL con il path completo su internet:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nNSURL *ImageURL = [NSURL URLWithString: ImageURLString];\r\n<\/pre>\n<p>Come forse gi\u00e0 saprete, non ci \u00e8 possibile scrivere nel path del bundle, o all&#8217;interno della nostra applicazione.<br \/>\nQuindi <u>il suggerimento di Apple \u00e8 quello di scrivere all&#8217;interno della directory Documents della nostra applicazione<\/u>. La directory Documents viene creata per default per ogni applicazione, quindi non dovremo preoccuparci di verificare che esista o meno, tra l&#8217;altro \u00e8 la prima directory che torna il metodo di retrieve di tutte le directory dell&#8217;applicativo.<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nNSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);\r\nNSString *documentsDirectory = [paths objectAtIndex:0];\r\n\r\nNSString *filename = string; \/\/nome del file su disco, possiamo anche chiamarlo in altro modo\r\n<\/pre>\n<p>Nome del file completo su filesystem:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nNSString *fullPathToFile = [documentsDirectory stringByAppendingPathComponent:filename];\r\n\r\nprintf(\"Path completo file:'%s' \", [fullPathToFile UTF8String]);\r\n<\/pre>\n<p>Questo controllo ci serve per non sovrascrivere un&#8217;immagine gi\u00e0 scaricata<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nif(![[NSFileManager defaultManager] fileExistsAtPath: fullPathToFile])\r\n{\r\n   NSData *data = [[NSData alloc] initWithContentsOfURL: ImageURL];\r\n   UIImage *image = [[UIImage alloc] initWithData: data];\t\t\r\n<\/pre>\n<p>  Il codice che segue verifica l&#8217;estensione, nel caso sia un file .png scrive l&#8217;immagine cos\u00ec com&#8217; \u00e8, nel caso si tratti, invece, di un jpeg o jpg, allora deve specificare il rapporto di qualit\u00e0 (nel nostro caso 100%).<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n   if([ImageURLString rangeOfString: @\".png\" options: NSCaseInsensitiveSearch].location != NSNotFound)\r\n   {\r\n      [UIImagePNGRepresentation(image) writeToFile: fullPathToFile atomically: YES];\r\n   }\r\n   else if(\r\n\t[ImageURLString rangeOfString: @\".jpg\" options: NSCaseInsensitiveSearch].location != NSNotFound || \r\n\t[ImageURLString rangeOfString: @\".jpeg\" options: NSCaseInsensitiveSearch].location != NSNotFound\r\n\t)\r\n   {\r\n\t[UIImageJPEGRepresentation(image, 100) writeToFile: fullPathToFile atomically: YES];\r\n   }\r\n\r\n} \/\/chiudo --if(![[NSFileManager defaultManager] fileExistsAtPath:....\r\n\r\n<\/pre>\n<p>Spero vi torni utile questo tutorial, questa di seguito \u00e8 l&#8217;applicazione citata da cui \u00e8 tratto il nostro tutorial: <a href=\"http:\/\/itunes.apple.com\/it\/app\/ricette-romane\/id365931020?mt=8\" target=\"_blank\">Ricette Romane<\/a><\/p>\n<p>Alla prossima.<\/p>\n<p><a href=\"http:\/\/itunes.apple.com\/it\/app\/punti-patente\/id366266298?mt=8&amp;affId=403275\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/bn-Punti-Patente-Plus.jpg\" alt=\"Banner Punti Patente Plus\" title=\"bn-Punti-Patente-Plus\" width=\"470\" height=\"61\" class=\"aligncenter size-full wp-image-3029\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/bn-Punti-Patente-Plus.jpg 470w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/bn-Punti-Patente-Plus-300x38.jpg 300w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salve a tutti, nel tutorial di oggi vedremo come scaricare immagini da internet per arricchire la nostra&#8230;<\/p>\n","protected":false},"author":169,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[181,179,180,177,178],"class_list":["post-3055","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-download","tag-jpeg","tag-png","tag-salvare-immagini-in-locale","tag-uiimagejpegrepresentation"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3055"}],"version-history":[{"count":9,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3055\/revisions"}],"predecessor-version":[{"id":3060,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3055\/revisions\/3060"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}