Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 25-10-2008, 10:14. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-10-2008, 15:17 45535

    Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Με το μαλακό κύριοι, ετσι; Δεν έχω παρά μερικες ώρες "πτήσης" σε αυτά τα καινούρια πράγματα του διαβόλου.

    Εχω μια σελίδα aspx της οποίας ο μόνος σκοπός είναι να παράγει μια εικόνα, και να χρησιμοποιείται ως SRC στο img tag άλλων σελίδων.

    Το  contenttype της είναι κάθε φορά αντίστοιχο αυτού που θέλω να παράγω (είτε jpeg είτε png).  Το πρόβλημα είναι οτι όταν προσπαθώ να δείξω jpeg τότε εμφανίζεται μια μαύρη εικόνα. Οταν δείχνω png όλα γίνονται σωστά.

    Ο κώδικας που τρέχει στη σελίδα είναι ο εξής:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    _filename = Request.QueryString("f")
    _text = Request.QueryString("t")
    _size = CType(Request.QueryString("s"), Int32)

    Dim fm As New FontManager(Server.MapPath(".") + "\abramelin.otf")
    Dim s As MemoryStream = fm.GenerateStreamFromTypeface(fm.TypeFaceList(0), _text, _size)

    'Dim img As System.Drawing.Image
    'img = System.Drawing.Image.FromStream(s)

    'img.Save(Response.OutputStream, ImageFormat.Jpeg)
    Response.BinaryWrite(s.GetBuffer())

    End Sub

    Η κλάση FontManager είναι δική μου και τυπώνει fonts. Η GenerateStreamFromTypeface φέρνει ένα stream από το font που έχω προσδιορίσει.

    Από εκεί και πέρα είτε πάω το stream σε ένα image object και το κάνω save στο response (αυτό που έχω commented) είτε κάνω binarywrite το stream στο response απευθείας. Δεν υπάρχει καμία παρατηρηθείσα διαφορά μεταξύ των δύο αυτών τρόπων.

    Σας παραθέτω και τον κώδικα της GenerateStreamFromTypeface:

    Public Function GenerateStreamFromTypeface( _
    ByVal tf As Typeface _
    , ByVal text As String _
    , Optional ByVal fontSize As Int32 = 40 _
    , Optional ByVal sizeX As Int32 = 640 _
    , Optional ByVal sizeY As Int32 = 480 _
    , Optional ByVal dpiX As Int32 = 120 _
    , Optional ByVal dpiY As Int32 = 96 _
    ) As Stream

    Dim txt As FormattedText = New FormattedText(text, _
    New CultureInfo("el-gr"), _
    System.Windows.FlowDirection.LeftToRight, _
    tf, _
    fontSize, _
    System.Windows.Media.Brushes.Black)


    Dim drawingVisual As DrawingVisual = New DrawingVisual()
    Dim drawingContext As DrawingContext = drawingVisual.RenderOpen()
    drawingContext.DrawText(txt, New System.Windows.Point(2, 2))
    drawingContext.Close()

    Dim bmp As RenderTargetBitmap = New RenderTargetBitmap(sizeX, sizeY, dpiX, dpiY, PixelFormats.Default)
    bmp.Render(drawingVisual)

    Dim stream As New System.IO.MemoryStream
    With (stream)

    Dim encoder As JpegBitmapEncoder = New JpegBitmapEncoder()
    'encoder.Interlace = PngInterlaceOption.On
    encoder.Frames.Add(BitmapFrame.Create(bmp))
    encoder.Save(stream)

    End With

    Return (stream)
    End Function

    Ολα αυτά βέβαια είναι test.

     

    Το θέμα είναι οτι αν αντί jpegbitmapencoder χρησιμοποιήσω pngbitmapencoder (αλλάζοντας βέβαια και το contenttype της σελίδας που χρησιμοποιεί αυτά τα πράγματα) τότε παίρνω ένα πολύ όμορφο αποτέλεσμα. Στον jpegbitmapencoder όμως παίρνω μαυρη μαυρίλα. Μπορεί κάποιος να με διαφωτίσει στο γιατί (και με το μαλακό);

     

     

     

     

     

     

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-10-2008, 09:02 45549 σε απάντηση της 45535

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Έχεις κάνεις δοκιμές να γράψεις το αποτέλεσμα σε αρχείο να δεις αν είναι valid το .jpg που δημιουργήται; Μήπως υπάρχει εκεί το πρόβλημα και όχι στο "plumming" της σελίδας σου;

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  18-10-2008, 10:48 45556 σε απάντηση της 45549

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Η αλήθεια είναι πως όχι. Πάντως, μετά από πολύ ψάξιμο στο google, διαπίστωσα οτι το ίδιο πρόβλημα (μαύρη εικόνα) το έχουν και άλλοι, όχι πάντοτε υπό τις ίδιες συνθήκες βέβαια.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-10-2008, 11:25 45558 σε απάντηση της 45556

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    cap:
    Η αλήθεια είναι πως όχι. Πάντως, μετά από πολύ ψάξιμο στο google, διαπίστωσα οτι το ίδιο πρόβλημα (μαύρη εικόνα) το έχουν και άλλοι, όχι πάντοτε υπό τις ίδιες συνθήκες βέβαια.

    Κάποια στιγμή μου είχε μπει η ιδέα να φτιάξω Animated-Gifs, και είχα βρει το το nGif. Δεν ψάχνεις μπας και βρεις κάτι άλλο που να φτιάχνει png/jpg εικόνες και να είναι free;

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  18-10-2008, 11:36 45559 σε απάντηση της 45558

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Το θέμα είναι οτι θέλω να κάνω render opentype fonts σε jpegs. Αρα είναι κομματάκι μονόδρομος το WPF. Αν και με την προσέγγιση που ακολούθησα (formattedText) δεν μπορώ να χρησιμοποιήσω opentype features, αλλα δεν τολμώ ακόμα να βουτήξω πιό βαθιά...
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-10-2008, 12:00 45561 σε απάντηση της 45559

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Γιατί WPF; Πόσο ποιότητα πρέπει να έχουν αυτές οι εικόνες; Ποιος είπε ότι δεν μπορείς να χρησιμοποιήσεις OpenType fonts μέσα από το graphics device;

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  18-10-2008, 12:54 45564 σε απάντηση της 45561

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Εδώ σε θέλω! Διαφώτισε!


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  18-10-2008, 13:10 45565 σε απάντηση της 45564

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Για δες το παρακάτω:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    using System;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;

    public class CTestBitmapFunctionality
    {
    public static void Main()
    {
    Bitmap newBitmap = null;
    Graphics g = null ;

    try
    {
    Font fontCounter = new Font("Lucida Sans Unicode", 12);

    // calculate size of the string.
    newBitmap = new Bitmap(1,1,PixelFormat.Format32bppArgb);
    g = Graphics.FromImage(newBitmap);
    SizeF stringSize = g.MeasureString("Hello World", fontCounter);
    int nWidth = (int)stringSize.Width;
    int nHeight = (int)stringSize.Height;
    g.Dispose();
    newBitmap.Dispose();

    newBitmap = new Bitmap(nWidth,nHeight,PixelFormat.Format32bppArgb);
    g = Graphics.FromImage(newBitmap);
    g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0,0,nWidth,nHeight));

    g.DrawString("Hello World", fontCounter, new SolidBrush(Color.Black), 0, 0);
    newBitmap.Save("c:\\test.png", ImageFormat.Png);
    }
    catch (Exception e)
    {
    Console.WriteLine(e.ToString());
    }
    finally
    {
    if (null != g) g.Dispose();
    if (null != newBitmap) newBitmap.Dispose();
    }
    }
    }

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  18-10-2008, 13:14 45566 σε απάντηση της 45565

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Ξέχασα!

    Το αναλυτικό παράδειγμα είναι στη διεύθυνση: http://www.aspheute.com/english/20000728.asp

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  21-10-2008, 13:57 45647 σε απάντηση της 45566

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Μερικές παρατηρήσεις:

    1. Απλό και εύκολο να γίνει αυτό που περιγράφει ο κώδικας, μόνο που υποψιάζομαι οτι λειτουργεί με τα ήδη εγκατεστημένα στο σύστημα fonts. Εγώ θέλω να φορτώνω ένα font από αρχείο, ανεξάρτητα αν βρίσκεται ή οχι εγκατεστημένο στο σύστημα.

    2. Τα opentype fonts συχνά περιέχουν typefaces collections, τα οποία θέλω να τα λαμβάνω. Με αυτή την πρακτική δεν ξέρω αν μπορώ.

    3. Δεν έχω πρόσβαση στα ιδιαίτερα χαρακτηριστικά των opentype fonts (alternate numbers, swashes και όπως αλλιώς λέγονται) - θα μου πεις, με την λογική που ακολούθησα με το FormattedText πάλι δεν είχα. Αλλά με κάποιες άλλες κλάσεις του WPF (που ΔΥΣΤΥΧΩΣ το msdn περιγράφει μόνο με XAML!) ενδέχεται να έχω.

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  25-10-2008, 10:14 45733 σε απάντηση της 45647

    Απ: Διαφορετική συμπεριφορά Jpeg/Png image encoders στην αποτύπωση (πρόβλημα με τον jpeg)

    Τελικά συνέχισα την υλοποίηση σε WPF. Το κλεινω, μια και δεν έχει φανεί να υπάρχει κάτι άλλο να πούμε σχετικά με αυτό.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems