سورس کد تبدیل تصویر به متن و برعکس جهت ارسال در شبکه

convert image to string in java

روشهای زیادی برای تبدیل تصویر به رشته متنی و بالعکس وجود دارد که بعضی از آنها از روشهای خیلی پیچیده استفاده می کنند (بسته به حوزه های کاربردی ) اما در اینجا ما یک کد آماده ارایه می کنیم که از API های یک کتابخانه خارجی برای این منظور استفاده می کند این سورس کد جهت تبدیل تصویر به متن و انتقال آن در شبکه کاربرد دارد .
نام این کتابخانه خارجی Apache Commons Codec 1.10 هست که از اینجا می توانید آن را دانلود کرده و به محیط برنامه نویسی خود add نمایید .
این کد ابتدا تصویر را از روی هارد خوانده و در یک رشته به اصطلاح Base64 ذخیره می کند به صورت باینری
وبعد به کمک دستور و متد زیر آن را به رشته تبدیل می کند

کد:
String imageDataString = encodeImage(imageData);

و بعد دوباره آن را به حالت تصویر برمی گرداند (همان تصویر اصلی )
به وسیله متد زیر :

کد:
 byte[] imageByteArray = decodeImage(imageDataString);

مزیت این روش در این است که تصویر را می توان به جای اینکه به همان فرمت تصویر به  درون شبکه منتقل کنیم آن را به صورت یک فایل متنی (مانند فایل xml ،JASON و… ) در شبکه از ماشینی به ماشین دیگرانتقال دهیم  و هر رمزگذاری که اعمال می کنیم روی آن فایل متنی باشد نه تصویر .

کد کامل این برنامه رو در زیر می توانید مشاهده نمایید

کد:
package com.myjeeva.image;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import org.apache.commons.codec.binary.Base64;
 
/**
 * @desc Image manipulation - Conversion
 * 
 * @filename ImageManipulation.java
 * @author Jeevanandam M.
 * @copyright myjeeva.com
 */
public class ImageManipulation {
     
    /**
     * @param args
     */
    public static void main(String[] args) {
        File file = new File("/Users/sara/Pictures/wallpapers/water-drop.jpg");

 
        try {           
            // Reading a Image file from file system
            FileInputStream imageInFile = new FileInputStream(file);
            byte imageData[] = new byte[(int) file.length()];
            imageInFile.read(imageData);
 
            // Converting Image byte array into Base64 String
            String imageDataString = encodeImage(imageData);
 
            // Converting a Base64 String into Image byte array
            byte[] imageByteArray = decodeImage(imageDataString);
             
            // Write a image byte array into file system
            FileOutputStream imageOutFile = new FileOutputStream(
                    "/Users/jeeva/Pictures/wallpapers/water-drop-after-convert.jpg");
            imageOutFile.write(imageByteArray);
 
            imageInFile.close();
            imageOutFile.close();
 
            System.out.println("Image Successfully Manipulated!");
        } catch (FileNotFoundException e) {
            System.out.println("Image not found" + e);
        } catch (IOException ioe) {
            System.out.println("Exception while reading the Image " + ioe);
        }
 
    }
     
    /**
     * Encodes the byte array into base64 string
     *
     * @param imageByteArray - byte array
     * @Return String a {@link java.lang.String}
     */
    public static String encodeImage(byte[] imageByteArray) {
        return Base64.encodeBase64URLSafeString(imageByteArray);
    }
     
    /**
     * Decodes the base64 string into byte array
     *
     * @param imageDataString - a {@link java.lang.String}
     * @Return byte array
     */
    public static byte[] decodeImage(String imageDataString) {
        return Base64.decodeBase64(imageDataString);

    }
}

 


درباره نویسنده

مطالب مرتبط

4 نظر

  1. saeed

    سلام
    ببخشید من 1 سوال دارم.
    من می خوام یک فایل MRI رو تو متلب به فایل رشته متنی تبدیل کنم. بعدش این فایل رو تبدیل به مش سطحی کنم و در نهایت نمایش بدم.
    مشکل اول اینه که نمی دونم چطور میشه تبدیل به فایل متنی تو متلب کرد. این کد شما رو هم تو متلب زدم نشد، جایی هم نتونستم پیدا کنم که بتونم این Apache Commons Codec 1.10 را به کتابخانه متلب اضافه کنم.
    کلا تو اول کار گیر کردم.
    خیلی ممنون میشم کسی بتونه راهنمایی کنه .
    با تشکر

    پاسخ

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *