1

画像をキャプチャしてその画像を文字列に変換し、その文字列をtxtファイルに書き込み、サーバーに送信してサーバーがそのファイルを読み取り、その文字列を再度画像に変換する必要があるAndroidでアプリケーションを開発したい...

これで、画像を取得してその画像を文字列に変換し、その文字列をtxtファイルに書き込むことができました。

しかし、そのファイルを読み取ってその文字列を画像に変換しようとすると、機能しません...

画像を文字列に変換するコードは

File imageFile = new File(path);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
byte[] image = stream.toByteArray();
imgstr = Base64.encodeToString(image, 0);   

それをファイルに書き込むためのコードは

File file = new File("new.txt");
FileWriter w = new FileWriter("/sdcard/new/new.txt");
BufferedWriter out = new BufferedWriter(w);
out.write(data);
out.flush();
out.close();

そして、そのファイルを読み取り、その文字列を再度画像に変換するコードは

FileInputStream fstream = new FileInputStream("/sdcard/new/new.txt");          
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
ArrayList list=new ArrayList();
while ((strLine = br.readLine()) != null)
{
    list.add(strLine);
}
Iterator itr;
for (itr=list.iterator(); itr.hasNext(); )
{
    String str=itr.next().toString(); 
    StringBuffer sb=new StringBuffer(str);
    int length=sb.length();
    String imageDataString = sb.substring(0, length);
    byte[] decodedString = Base64.decode(imageDataString, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,decodedString.length); 
    FileOutputStream imageOutFile = new FileOutputStream("/sdcard/new/android.jpg");
    imageOutFile.write(decodedString);
    imageOutFile.close();
    System.out.println("File converted");

しかし、その文字列を画像に変換していないので、解決策を教えてください...

4

1 に答える 1

0

AndroidからWebサーバーにftp経由でファイルをアップロードするだけでよい場合は、これでうまくいきます(フロヨから作業します-ただし、Apache Commonsをインポートして、「src」フォルダー内にコピーをインストールする必要があります):

import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTPClient;
import android.util.Log;
public class FtpFileUp implements Runnable {

    private final String TAG = "FTPfile";
    boolean flagFTPOK = false;

    String fileName, fileDirSubLocalName, fileDirSubRemoteName;
    String fileDirName = NavigationActivity.fileDirName;


    FtpFileUp (String fileNameIn, String fileDirSubLocalNameIn, String fileDirSubRemoteNameIn) {
        fileName = (String) fileNameIn;
        fileDirSubLocalName = (String) fileDirSubLocalNameIn;
        fileDirSubRemoteName = (String) fileDirSubRemoteNameIn;
    }
    FtpFileUp (String fileNameIn) {
        String fileDirSubNameIn = "";
        fileName = (String) fileNameIn;
        fileDirSubLocalName = (String) fileDirSubNameIn;
        fileDirSubRemoteName = (String) fileDirSubNameIn;
    }
    FtpFileUp (String fileNameIn, String fileDirSubNameIn) {
        fileName = (String) fileNameIn;
        fileDirSubLocalName = (String) fileDirSubNameIn;
        fileDirSubRemoteName = (String) fileDirSubNameIn;
    }

    @Override
    public void run() {
        String ftpConnectString = "ftp.yourdomain.com";
        if (fileDirSubRemoteName != "") fileDirSubRemoteName += "/";
        if (fileDirSubLocalName != "") fileDirSubLocalName += "/";
        FTPClient ftpCli = new FTPClient();
        try {
           FileInputStream fis = new FileInputStream(fileDirName+"/"+fileDirSubLocalName+fileName);
           ftpCli.connect(ftpConnectString);
           ftpCli.login("user", "password");
           Log.i(TAG, "ok ftp "+ftpCli.getDataConnectionMode());
           ftpCli.storeFile("/"+fileDirSubRemoteName+fileName, fis);
           fis.close();
           flagFTPOK = true;
        } catch (Exception except) {
           Log.i(TAG, "ftp up FAIL "+except);
        }
    }

}

次のコードを使用して呼び出します (TRY CATCH によってカプセル化されています)。

Thread ftpThread01 = new Thread(new FtpFileUp("fileName", "", "/www/android/imgUpload"));
ftpThread01.start();

注:ご覧のとおり、デフォルトの場所を保存することにより、ftpを自動化するために使用できる2つの代替コンストラクターがあります。それらは問題なく削除できます。

于 2013-01-18T16:40:23.617 に答える