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

هل يمكن التعامل مع الصور ذات الإمتداد Ai

بدأه rohaili في 13 ديسمبر 2009 · 20 رد · 1,696 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

هناك نوع من الصور لا تتأثر بتكبيرها وتحافظ على جودتها بدون تشويش مثل الصور ذات الإمتداد ai والتي يتم التعامل معها في برنامج Adobe® Illustrator ، أحيانا تسمى الصور الخطية ، والسؤال ما مدى قدرة الجافا على إنتاج صور لا تتأثر جودتها بالتكبير أو التعامل مع أي نوع من أنواعها مثل ai ؟

تم تعديل هذه المشاركة بواسطة rohaili في 13 ديسمبر 2009 في 20:23

300_130.gif

#2

وعليكم السلام

لست بحاجة إلى ملفات ai

قم بتحويلها إلى ملفات svg والتي تدعمها الجافا بقوة

انظر هذا الرابط:

http://java.sun.com/developer/technicalArticles/GUI/svg/

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 13 ديسمبر 2009 في 20:43

#3

الصور التي تتعرف عليها الجافا افتراضيا هي gif, jpg, png, bmp، فقط

#4

هل هناك أمثلة على هذه الأنواع من الصور أخ rohaili

أخ Speed_Of_Light هل لديك أية معلومات عن svg

أقصد لماذا وجدت ما هي فائدتها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

أخي علاء

ملفات svg هي عبارة عن صور غير نقطية إنما شعاعية مبنية على تقنية xml

بمعنى أنها لا تحوي بكسلات إنما معادلات خطوط ومنحنيات

ميزاتها ؟!

أهم مزاياها أنها لا تتأثر بالتكبير كما ذكر الأخ rohaili

بمعنى أنه لا يحدث فيها انكشاف البكسل (تلك المربعات القبيحة التي تظهر عند تكبير الصورة)

هذا مثال بسيط عليها:

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="12cm">
   <g style="fill-opacity:0.7; stroke:black; stroke-width:0.1cm;">
     <circle cx="6cm" cy="2cm" r="100" style="fill:red;"
                     transform="translate(0,50)" />
     <circle cx="6cm" cy="2cm" r="100" style="fill:blue;"
                     transform="translate(70,150)" />
     <circle cx="6cm" cy="2cm" r="100" style="fill:green;"
                     transform="translate(-70,150)"/>
   </g>
</svg>

(يمكنك حفظها في ملف نصي بلاحقة svg ومشاهدة انتيجة)

لمزيد من المعلومات أنت تعرف إلى أين يجب أن تذهب :)

http://www.w3.org/Graphics/SVG/

http://en.wikipedia.org/wiki/Scalable_Vector_Graphics

بالنسبة لإستخدامها مع java يمكنك الاطلاع على هذا الرابط ( ILOG JViews):

http://java.sun.com/developer/technicalArticles/GUI/svg/

أو هذا الرابط (Java Fx)

http://www.devx.com/RichInternetApps/Article/35208/1954

1
#6

هل هي vector images؟؟

#8

أحيانا هذا النوع لا يستطيع تمثيل صور تحتوي على تفاصيل كثيرة مثل الصور الفوتوغرافية

#9

جزاكم الله خيرا .

وجزاك الله خيرا speed_of_light على هذه المعلومات القيمة جدا بالنسبة لي وأعتقد لجميع أعضاء المنتدى أيضا .

أقوم بالرسم على jpanel باستخدام الخطوط والكتابة كذلك ثم احول jpanel إلى صورة انسخها إلى الحافظة لالصقا في البرامج الأخرى ، ولكن هذه الصورة تتشوه عند تكبيرها ، فكيف أحول الدالة التالية لكي تعطيني صورة svg سواء في الحافظة أو كملف مستقل بالامتداد svg ؟


public void copyimagetoclipboard() {
BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = image.createGraphics();
g2.setClip(0, 0, panel.getWidth(), panel.getHeight());
panel.paint(g2);

transferable imagetransverable = new transferable(image);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imagetransverable, null);
}

تم تعديل هذه المشاركة بواسطة rohaili في 16 ديسمبر 2009 في 07:37

300_130.gif

#10

بالطبع ستتشوه لإنها صورة نقطية

عليك استخدام الصف SVGGraphics2D من مكتبة batik، إليك هذا المثال:

http://xmlgraphics.apache.org/batik/using/svg-generator.html#whatIsIt

وهكذا لن يعود للكود الموجود في ()copyimagetoclipboard أي لزوم!

أنا أنصح أن تقوم بكتابة صف يرث من JPanel ويحوي طرائق methods إضافية لتوليد صورة SVG وتصديرها (حفظها)

حاول تطبيق هذا الكلام على كودك وأرنا ما تصنع !

#11

بالمناسبة لماذا تحتاج هذه الصور اخ rohaili

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

يقوم البرنامج بالرسم والكتابة بطريقة معينة على لوحة ، ثم تحفظ هذه اللوحة كصورة لادراجها في البرامج الأخرى كالوورد ، لكن المستخدم قد يحتاج لتكبير الصورة في الوورد بعد إدراجها وهذه المشكلة .

المشكلة الأخرى الآن أن الوورد لا يدعم svg .

300_130.gif

#13

جيد جداً على كل تعلمنا شيئاُ جديداً بفضلك

وأنت لم تستفيد :)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#14

ليس هناك مشكلة !

قم بتكبير صورتك قبل إعادة تحويلها إلى صورة نقطية من جديد وحفظها في word !

#15

جزاك الله خيرا .

وماذا لو كنت اريد التعديل عليها بعد اضافتها في الوورد ، يعني بعد الضغط على الصورة تفتح في نفس البرنامج الذي أنشأها وتعدل .

300_130.gif

#16

لا يمكنك !

على الأقل ليس هناك طريقة "جاهزة" للقيام بذلك (على حد علمي)

طبعاً المبدأ يقوم على إنشاء عنصر OLE وتصديره إلى Word .... ولكن هذا صعب وغير عملي

لكن أقترح أن تحتفظ بنسخة من صورة الـ SVG في برنامجك وإعادة فتحها والتعديل عليها من البرنامج ثم إعادة تحديث ملف الـ Word

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 22 ديسمبر 2009 في 23:36

#17

بعد قراءة الروابط السابقة قمت بتحميل المشروع runsxz.jar من الصفحة التالية

http://code.google.com/p/rastertovector/downloads/list وأريد دراسته ولم أجد source code له ، فأين يمكن إيجاده ؟

300_130.gif

#18

بالمناسبة، الرابط الذي ذكرته لمشروع هدفه تحليل الصور النقطية لاستخراج الصور الشعاعية.

ولا يفيدك كثيراً ... فما زال قيد الإنشاء

وتحميل الكود المصدري من هنا:

http://rastertovector.googlecode.com/files/source.jar

سؤال: ما الذي ترغب بتكبيره؟ صورة نقطية مرسومة على مكون Swing ؟ أم رسومات Java Graphices ؟

#19

جزاك الله خيرا .

صورة مرسومة على لوحة jpanel .

300_130.gif

#20

إذاً لا تحاول تحويلها إلى صورة شعاعية، لأن إمكانيات هذه العملية ضعيفة في معظم الأحيان، وخاصة بالنسبة إلى الصور المعقدة (حتى في برامج الرسم الاحترافية !)

لكن يمكنك تكبيرها تكبيراً (ناعماً) وهو أفضل حل متاح لك ...

إليك هذا المثال (نسخة معدلة من هذا المثال):

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class scale_example extends javax.swing.JFrame {

    JButton button = new JButton("double size");
    scalablePanel sp = new scalablePanel();

    public scale_example(String s) {
        JPanel jp = new JPanel();
        jp.setBackground(Color.red);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(sp, BorderLayout.CENTER);
        getContentPane().add(button, BorderLayout.SOUTH);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sp.setHScaleFactor(sp.getHScaleFactor()*2);
                sp.setVScaleFactor(sp.getVScaleFactor()*2);
                sp.repaint();
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 400);
        setTitle(s);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new scale_example("scale graphices").setVisible(true);
            }
        });
    }
}

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import javax.swing.JPanel;

public class scalablePanel extends JPanel {

    private double hScaleFactor = 1.0;
    private double vScaleFactor = 1.0;
    private RenderingHints renderHints;
    private Image img = Toolkit.getDefaultToolkit().getImage("/home/test.png");
    public scalablePanel() {
        renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        renderHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.scale(hScaleFactor, hScaleFactor);
        g2d.setRenderingHints(renderHints);
        g2d.drawImage(img, 0, 0, this);
    }

    public void setHScaleFactor(double d) {
        hScaleFactor = d;
    }

    public double getHScaleFactor() {
        return hScaleFactor;
    }

    public void setVScaleFactor(double d) {
        vScaleFactor = d;
    }

    public double getVScaleFactor() {
        return vScaleFactor;
    }
}
#21

جزاك الله خيرا .

300_130.gif

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

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

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

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

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