روشهای زیادی برای تبدیل تصویر به رشته متنی و بالعکس وجود دارد که بعضی از آنها از روشهای خیلی پیچیده استفاده می کنند (بسته به حوزه های کاربردی ) اما در اینجا ما یک کد آماده ارایه می کنیم که از 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); } }
سلام
ببخشید من 1 سوال دارم.
من می خوام یک فایل MRI رو تو متلب به فایل رشته متنی تبدیل کنم. بعدش این فایل رو تبدیل به مش سطحی کنم و در نهایت نمایش بدم.
مشکل اول اینه که نمی دونم چطور میشه تبدیل به فایل متنی تو متلب کرد. این کد شما رو هم تو متلب زدم نشد، جایی هم نتونستم پیدا کنم که بتونم این Apache Commons Codec 1.10 را به کتابخانه متلب اضافه کنم.
کلا تو اول کار گیر کردم.
خیلی ممنون میشم کسی بتونه راهنمایی کنه .
با تشکر
سلام دوست عزیز
کدی که اینجا گذاشته شده و توضیحات گفته شده برای محیط برنامه نویسی جاوا هست، توی انجمن سوالتون رو مطرح کنین، بخش پردازش تصویر با متلب:
http://www.noandishaan.com/forums/forum1942.html
بسیار متشکرم دوس عزیز Imaaan
اقا عالی بودددددددد خیلی ممنونتونم کلی گشتم دنبال چنین چیزی
سلام
از این کد می توانم در c# استفاده کنم
سلام
از این کد می توانم در c# استفاده کنم ؟