2016-06-20 17 views
5

Mentre si preleva l'immagine da UIImageController e si calcola la sua dimensione, c'è una variazione nella dimensione dell'immagine, vale a dire la dimensione dell'immagine nel disco è diversa.Variazione delle dimensioni di UII quando viene prelevata da UIImagePickerController

C'è un modo per ottenere le dimensioni corrette?

Quello che ho cercato -

  1. Conversione immagine ai dati utilizzando UIImagePNGReprensentation & UIImageJPEGReprensentation. Il problema con questo approccio -

a. Questo approccio consuma memoria, quindi non sembra buono.

b. Le dimensioni variano, posso capire che converte l'immagine in dati e quindi calcola le dimensioni, quindi le dimensioni sono diverse.

Ma qualunque cosa abbia cercato, tutte le risposte accettate riguardano solo questo.

  1. Utilizzare ALAssetsLibrary per ottenere le dimensioni dell'immagine, ma le dimensioni calcolate non corrispondono anche alla dimensione del disco.

Ho usato seguente metodo - assetForURL: resultBlock:^(ALAsset *asset) failureBlock:

  1. Utilizzando CGImageRef metodi CGImageGetBytesPerRow, ma questo does't anche dare risultato desiderato.

Qualsiasi altro approccio che ho perso?

EDIT -

Così qui sono differenza di dimensioni -

quando controllo la dimensione delle immagini nel Finder - 5.3 MB

quando controllo dimensioni dell'oggetto UIImage utilizzando -

UIImageJPEGRepresentation (immagine . 1,0) - 2,29 MB

Quando controllo la dimensione dell'immagine utilizzando Libreria ALsset - 4.4 MB

+0

Hai preso in considerazione questo fattore https://discussions.apple.com/ thread/5501534? start = 0 & tstart = 0 – itechnician

+0

@itechnician Non sto spostando file tra i sistemi, quello che ho fatto è catturare l'immagine dalla fotocamera dell'iPhone, l'ho importato su Mac, ho controllato la dimensione dell'immagine su mac, ma la dimensione che ho calcolato da UIImage varia molto. – rishi

+0

qual è la dimensione effettiva dell'immagine e la dimensione calcolata, puoi pubblicare anche la variazione – itechnician

risposta

-1

Avevo bisogno di qualcosa di simile e mi sono imbattuto nello stesso problema. Risulta tweaking il fattore di qualità un po 'ottiene questo andando.

UIImageJPEGRepresentation(image, 0.67) 

Idealmente la quality dovrebbe essere 1.0 per le dimensioni dell'immagine da calcolare la forma più precisa. Risulta che fornisce valori anormalmente grandi per la qualità 1.0.

Non sono riuscito a trovare questo documento ovunque e ho dovuto mantenere la soluzione di cui sopra nella mia app Foto. Ha funzionato bene per il mio caso d'uso. Non è l'ideale, potrebbe essere necessario modificare ulteriormente questo aspetto per adattarlo al meglio al caso d'uso.

+0

controlla post modificato sopra, hai affrontato questo tipo di problema. – rishi

+0

Non esattamente così. Ma sì, c'erano ** differenze anormalmente grandi ** nella dimensione del file. Nel mio caso, quasi tutte le immagini erano JPEG, foto scattate dalla fotocamera. E posso solo confermare questo per ** UIImageJPEGRepresentation **. –

-1

Ho riscontrato un problema in cui la dimensione dell'immagine dell'immagine catturata era così grande che non riuscivo a gestirla, quindi ho dovuto ridimensionarla alla dimensione desiderata ...Sto aggiungendo il mio codice qui

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    for(UIView *v in imgView.subviews) { 
     [v removeFromSuperview]; 
    } 
    CGSize newSize=CGSizeMake(200, 200); 
    UIImage *image = [info valueForKey: UIImagePickerControllerOriginalImage]; 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    [imgView setImage:newImage]; 

    [self.view layoutIfNeeded]; 
    [self.navigationController dismissViewControllerAnimated: YES completion: nil]; 
    }); 
} 
+0

hai letto la domanda, il mio problema è con la variazione di dimensione e con la variazione di dimensione ho menzionato specificamente la dimensione in MB. Dimensione del disco e dimensioni dell'oggetto UIImage. – rishi

0

UIImageJPEGRepresentation & UIImagePNGReprensentation sta utilizzando il metodo di compressione diverso e il rapporto per le immagini in modo che è il motivo per cui si stanno ottenendo diverse dimensioni di immagini.

Anche ALAssetLibrary utilizza un metodo di compressione delle immagini diverso per l'immagine, motivo per cui si ottengono immagini di dimensioni diverse ogni volta.

Basta usare uno dei tre metodi per ottenere le dimensioni dell'immagine non provare a confrontarle. Perché tutti e tre i metodi utilizzano i propri metodi di compressione delle immagini.

0

Come altre risposte nel post, diverse tecniche di lettura dell'immagine avranno dimensioni diverse se confrontate con le dimensioni del file del disco e nella dimensione del file di memoria.

Suggerisco di guardare this messaggio SO. L'utente utilizza l'attributo NSFileSize per leggere la dimensione "effettiva" sul disco.

Mi permetto di dire che ci sarà sempre una differenza di dimensioni tra ciò che è su disco rispetto alla dimensione in memoria a causa del meccanismo di supporto che viene utilizzato per rappresentare un'immagine in memoria rispetto a un'immagine memorizzata su disco.

È possibile modificare il proprio approccio. Se il tuo obiettivo è determinare la "dimensione" dell'immagine in memoria, devi misurare la dimensione rispetto al meccanismo di compressione che usi. Se il tuo obiettivo è determinare la "dimensione" del file quando è su disco, ti suggerisco di chiedere al sistema operativo di fornirti i suoi metadati (NSFileSize) su quell'immagine sul disco. Ancora, a seconda della tecnica di compressione utilizzata per salvare l'immagine su disco, i confronti delle dimensioni varieranno. Usando NSFileSize otterrai una risposta definitiva alla dimensione "reale" dell'immagine su disco utilizzando una tecnica di compressione sia JPEG, PNG, ecc.

Problemi correlati