Autore Topic: conversione Base64. problema  (Letto 1486 volte)

Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
conversione Base64. problema
« il: 23 Maggio 2011, 19:04:49 CEST »
0
Ho creato una gallery nella mia app. Mi consente di vedere le immagini del dispositivo, sceglierne una e al premere del tasto CONFERMA me le invia sul web. E' una tesi, quindi non mi interessa il peso del database e robe varie. Per cui voglio semplicemente:
convertire una immagine in Base64 e inviare il dato al server.
Quindi faccio il seguente per la conversione (provo a stampare con un Toast il risultato, per vedere se funziona):
Codice (Java): [Seleziona]
bm = MediaStore.Images.Media.getBitmap(c, uriSelezionata);
                                                ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                                        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object  
                                        byte[] b = baos.toByteArray();
                                        //String encodedImage = Base64.encodeBytes(b);
                                        Toast.makeText(getBaseContext(), "URI: " + b, Toast.LENGTH_SHORT).show();
                               

Sull'emulatore tutto ok. Quando poi lo provo però su un dispositivo fisico (nel mio caso un Ideos) mi va in crash il programma.
Dopo vari tentativi, ho scoperto che il problema è la riga che ho messo come commento. Fa tutto, poi quando arriva li, crasha e si blocca
la mia app (con tanto di messaggio di errore).
Al che mi chiedevo.. esiste un modo alternativo per generare una codifica in Base64?
(p.s. lavoro su Android 2.1 e uso la classe definita in questo topic per la conversione in Base64
anddev.org • View topic - [TUTORIAL] How to base64 encode decode)

 

Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:conversione Base64. problema
« Risposta #1 il: 23 Maggio 2011, 19:21:00 CEST »
0
Ho notato una cosa, proprio adesso, assai più strana.
Se uso una foto scaricata da internet, funziona bene. Se invece uso una foto che ho scattato io, l'applicazione crasha.
Sarà quindi un problema, credo, di dimensioni della foto.
Infatti quella scaricata è sotto gli 8 kb. Quella scattata è 438 kb invece.
Come posso risolvere secondo voi?
« Ultima modifica: 23 Maggio 2011, 19:25:51 CEST da Tk.3 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo

Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:conversione Base64. problema
« Risposta #3 il: 23 Maggio 2011, 19:41:16 CEST »
0
scusami, sono così innervosito da questo fatto che sul dispositivo non vada, mentre sull'emulatore si, che ho dimenticato di inserirlo prima.

Codice: [Seleziona]
05-23 17:37:55.293: INFO/ActivityManager(51): Displayed activity com.fotogalleria/.fotogalleria: 12602 ms (total 12602 ms)
05-23 17:38:05.375: DEBUG/dalvikvm(223): GC freed 1379 objects / 190168 bytes in 201ms
05-23 17:38:10.316: DEBUG/dalvikvm(247): GC freed 581 objects / 48032 bytes in 121ms
05-23 17:38:16.735: DEBUG/dalvikvm(274): GC freed 815 objects / 183696 bytes in 115ms
05-23 17:38:16.874: DEBUG/dalvikvm(274): GC freed 214 objects / 9160 bytes in 130ms
05-23 17:38:16.964: INFO/NotificationService(51): enqueueToast pkg=com.fotogalleria callback=android.app.ITransientNotification$Stub$Proxy@43d5be00 duration=0
05-23 17:38:17.003: INFO/fotogalleria(274): uri content://media/external/images/media/2 byte: [B@43bb9178 endodedImage: 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
05-23 17:38:17.334: DEBUG/dalvikvm(274): GC freed 87 objects / 367968 bytes in 84ms
05-23 17:38:17.474: DEBUG/dalvikvm(274): GC freed 6 objects / 184 bytes in 125ms
05-23 17:38:17.484: INFO/dalvikvm-heap(274): Grow heap (frag case) to 4.333MB for 262148-byte allocation
05-23 17:38:17.654: DEBUG/dalvikvm(274): GC freed 0 objects / 0 bytes in 171ms
05-23 17:38:17.825: DEBUG/dalvikvm(274): GC freed 0 objects / 0 bytes in 160ms
05-23 17:38:17.894: INFO/dalvikvm-heap(274): Grow heap (frag case) to 5.333MB for 1048580-byte allocation
05-23 17:38:18.084: DEBUG/dalvikvm(274): GC freed 0 objects / 0 bytes in 185ms
05-23 17:38:21.995: WARN/KeyCharacterMap(274): No keyboard for id 0
05-23 17:38:22.004: WARN/KeyCharacterMap(274): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-23 17:38:22.444: DEBUG/dalvikvm(166): GC freed 3074 objects / 188360 bytes in 374ms

non mi sembra ci sia nulla di sbagliato.
Mi lascia solo perplesso la lunghezza della codifica. Normale sia così lunga?

Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:conversione Base64. problema
« Risposta #4 il: 24 Maggio 2011, 18:20:23 CEST »
0
nessuno sa aiutarmi? Continuo a perderci la testa da 3 giorni ormai. Funziona, ma con foto leggermente più grandi si blocca. Eppure non definisco la dimensione da nessuna parte...


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:conversione Base64. problema
« Risposta #5 il: 24 Maggio 2011, 18:22:21 CEST »
0
Potresti postare il logcat di quando si blocca?

Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:conversione Base64. problema
« Risposta #6 il: 25 Maggio 2011, 16:17:26 CEST »
0
in realtà non si blocca, mi mostra una finestra in cui mi dice che c'è stato un problema e cliccando ok torna alla schermata precedente. Il logcat non da errori.
Quindi è come se sopra una certa dimensione dell'immagine, non funzionasse. Volevo chiedervi:
Codice (Java): [Seleziona]
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
il 100 che uso cosa rappresenta? Perchè credo di aver capito che modificando quello
potrebbe andare.
Il problema sono le foto "grosse". quelle scaricate da internet o quelle scattate a bassa risoluzione
non funzionano, mi danno quell'errore di cui parlavo.


Offline Tk.3

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:conversione Base64. problema
« Risposta #7 il: 26 Maggio 2011, 20:51:32 CEST »
0
mi rispondo da solo, non vorrei che qualcun'altro perda del tempo così come l'ho perso io, inutilmente.
Il problema, come sospettato, era nella seguente riga di codice:

Codice (Java): [Seleziona]
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
nel caso di PNG (non era il mio caso) l'immagine se ne frega del numerino che scrivete (nell'esempio sopra 100) e funzionerà sempre.
Nel caso del JPEG (il mio caso) quel numerino è fondamentale. Assume valori da 0 a 100 (sinceramente ho perso molto tempo su questo discorso, perché tanti forum e siti lo indicano come una sorta di "indicatore massimo" di kb. NON E' ASSOLUTAMENTE VERO!)
e serve a dire ad Android la percentuale della qualità che si vuole mantenere.
Questo però va in contrasto con alcuni tipi di immagine. Mi spiego.
Se scattate in QVGA o ad esempio ad 1 megapixel, la foto di per se è piccola (come dimensione), quindi il massimo della qualità (nel caso scriviate 100) viene mantenuto.
Scattando invece a risoluzioni più alte, le cose cambiano: l'immagine è troppo "grande" per la conversione ad high quality (100) e si
blocca la compressione in bitmap, mostrando un errore.
Per risolvere io ho fatto:

Codice (Java): [Seleziona]
bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);
e posso dire che funziona tutto, e bene.
Ho provato anche a 10 o 5. La conversione avviene perfettamente con tutte le JPEG e ... sarà forse il mio Ideos ad avere una qualità
grafica non eccezionale... ma da 5 a 100 la differenza è davvero minima (come qualità).
Comunque poi voi gestite la cosa come volete.

Tk .3