-2

画像を Base64 文字列に暗号化しようとしています。必要なコードを見つけてください。応答として null 値を取得しています

fullpath = /Users/srt/Library/Application Support/iPhone Simulator/5.1/Applications//Documents/image.png



UIImage *sImage=[UIImage imageNamed:fullPath];
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
    NSLog(@"image saved");
    NSLog(@"%@",fullPath);
   NSData* data = UIImageJPEGRepresentation(sImage, 1.0f);


    NSString *strEncoded = [self Base64ImageEncode:data];
     NSLog(@"This is the encryption %@ ",strEncoded);

-(NSString *)Base64ImageEncode:(NSData *)data{
    //Point to start of the data and set buffer sizes
    int inLength = [data length];
    int outLength = ((((inLength * 4)/3)/4)*4) + (((inLength * 4)/3)%4 ? 4 : 0);
    const char *inputBuffer = [data bytes];
    char *outputBuffer = malloc(outLength);
    outputBuffer[outLength] = 0;

    //64 digit code
    static char Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    //start the count
    int cycle = 0;
    int inpos = 0;
    int outpos = 0;
    char temp;

    //Pad the last to bytes, the outbuffer must always be a multiple of 4
    outputBuffer[outLength-1] = '=';
    outputBuffer[outLength-2] = '=';

    /* http://en.wikipedia.org/wiki/Base64
     Text content   M           a           n
     ASCII          77          97          110
     8 Bit pattern  01001101    01100001    01101110

     6 Bit pattern  010011  010110  000101  101110
     Index          19      22      5       46
     Base64-encoded T       W       F       u
     */


    while (inpos < inLength){
        switch (cycle) {
            case 0:
                outputBuffer[outpos++] = Encode[(inputBuffer[inpos]&0xFC)>>2];
                cycle = 1;
                break;
            case 1:
                temp = (inputBuffer[inpos++]&0x03)<<4;
                outputBuffer[outpos] = Encode[temp];
                cycle = 2;
                break;
            case 2:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xF0)>> 4];
                temp = (inputBuffer[inpos++]&0x0F)<<2;
                outputBuffer[outpos] = Encode[temp];
                cycle = 3;
                break;
            case 3:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xC0)>>6];
                cycle = 4;
                break;
            case 4:
                outputBuffer[outpos++] = Encode[inputBuffer[inpos++]&0x3f];
                cycle = 0;
                break;
            default:
                cycle = 0;
                break;
        }
    }
    NSString *pictemp = [NSString stringWithUTF8String:outputBuffer];
    free(outputBuffer);
    return pictemp;
}

エンコードされた結果は、必要に応じて、または他のより良い方法This is the encryption で、私の間違いと理由で親切に修正してください。

4

1 に答える 1

2

この方法を使用して、ドキュメントディレクトリから画像をロードすることはできませんimageNamed:。このメソッドは、アプリケーションバンドルからイメージをロードするために使用されます。パラメータは画像の名前である必要があります。

好き:

UIImage *tempImage = [UIImage imageNamed:@"myImage.png"];

そのため、画像はnullになります。

imageWithContentsOfFile:メソッドを使用します。

UIImage *sImage = [UIImage imageWithContentsOfFile:fullPath];
于 2012-11-21T11:50:52.217 に答える