الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن مساعده في فهم كيفية انشاء برنامج Encoder يقوم بتحويل صوره لأنواع اخرى؟

بدأه FunnyWolF في 2 سبتمبر 2009 · 5 رد · 763 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

انا ابي اسوي برنامج بالجافا

images ُEncoder

لكن بصراحه انا ماني عارف من فين ابدأ

فياليت احد يدلني كيف ابدأ او اش احتاج لكتابة هالبرنامج

والف شكر مقدما

#2

يمكنك بسهولة تغيير نوع الصورة، يكفي أنك تقرأها وتخزنها على شكل BufferedImage، وهذه الكلاس فيها المعلومات عن الصورة لكنها مستقلة عن نوع الصورة، ثم بعد ذلك تسجل الصورة بالصيغة التي تريد

هذا المثال يطبع أنواع الصور التي يتعرف عليها الجافا، ثم يحول صورة jpg إلى صورة png


import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class ChangeImageFormat {
public static void main(String[] args) {
try {
for (String format : ImageIO.getReaderFormatNames())
System.out.println(format);
BufferedImage image = ImageIO.read(new File("img.jpg"));
ImageIO.write(image, "png", new File("newImg.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
   import java.io.File;

إذا كنت تريد عمل التحويل يدويا، فعليك معرفة خصائص كل نوع من الصور وماهي المعلومات التي يحتويها،

مثلا

gif file format

png file format

jpeg file format

#3

شكراً لك اخي الكريم

لكن اللي ملاحضه ان البرنامج يقوم فقط بحفظ الصوره بصيغه مختلفه

طيب ..... انا لو بغيت البرنامج يقوم بتغير خصائص الصوره. مثلا يقوم بضغط الصوره او الجوده بحيث جودة الصوره تتغير

طبعا راح احتاج لحفظ الصوره بضغطها اول شي , فممكن استخد الـ

Huffman coding Algorithm or LZW Algorithm

لعمل ذلك

وطبعا بعد عملية الضغط راح نخسر بعض البايتات من الصوره "تـقـل الجوده" , ولكن في طريقه اسمها

Quantization

اللي هي التكميم , بحيث تقلل من عدد البايتات المفقوده

ولكن انا اعرف المبدأ او تقدر تقول الجزء النظري ولكن مو عارف كيف ممكن اطبقها عالبرنامج

وكنت اقلب في المكتبه اللي هي

http://java.sun.com/javase/6/docs/

ولكن لخبرتي المتواضعه في الجافا لم اتمكن من ايجاد حل

أي افكار .....؟

#4

حسب علمي، فإن أغلب أنواع الصور تكون مضغوطة، فمثلا gif تستعمل LZW. الصور غير المضغوطة هي فقط bmp على ما أعتقد

على العموم من أجل القيام بالذي تريده فبجب أن يكون لديك الصورة على شكل matrice حيث كل عنصر يمثل pixel

الكلاس Raster تمثل جدول من الpixels ويمكن لاحصول عليها من خلال BufferedImage

هذا المثال يستخرج الRaster من صورة ومن ثم يطبع طول وعرض الصورة، ويطبع قيم الpixels الموجودة في السطر الأول من الصورة

قيمة ال"pixel" مكونة من ثلاث قيم، الأحمر والأخضر والأزرق، ويتم تخزيت هذه القيم في المصفوفة pixel


import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import javax.imageio.ImageIO;

public class TestRaster {
public static void main(String[] args) {
try {
BufferedImage image = ImageIO.read(new File("test.png"));
Raster raster = image.getData();
int imageWidth = raster.getWidth();
int imageHeight = raster.getHeight();
System.out.println("Image width: " + imageWidth + " pixels");
System.out.println("Image height: " + imageHeight + " pixels");
for (int i = 0; i < imageWidth; i++) {
int[] pixel = new int[3];
raster.getPixel(i, 0, pixel);
System.out.println("red: " + pixel[0]);
System.out.println("green: " + pixel[1]);
System.out.println("blue: " + pixel[2]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
 import java.io.File;

#5

أظن أن أخانا يقصد معالجة الصور

مثلا تغيير الألوان إلى أبيض و أسود فقط , أو النقش على الصورة , تكبير أو تصغير الصورة !!!!! ؟؟

#6

لعل يفيدك هذا الرابط ....

حيث يحتوي على مكتبه جاهزه تقوم بعملية الضغط و معالجة الصور

http://www.lac.inpe.br/~rafael.santos/JIPCookbook/index.jsp

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…