2009-07-14 7 views
2

Ich verwende eine Zusammenstellung von ActionScript's getPixel und php's imagecreatetruecolor und imagesetpixel, um ein PNG-Bild eines swf-Films in einem Browser zu erzeugen.Kann ich dynamisch ein 300-dpi-Bild aus einer Flash-Datei erzeugen?

Im Moment wird es ein 72 dpi Bild mit der gleichen Auflösung wie der swf Film ausgeben, aber ich wurde nach der Möglichkeit gefragt, stattdessen ein 300 dpi Bild zu erzeugen.

Ist das möglich?

Antwort

4

Flash weiß nicht wirklich etwas über Auflösung oder dpi. Die einzige Möglichkeit, ein Bild mit der richtigen Pixelanzahl und Druckqualität aus dem Flash-Speicher auszugeben, besteht darin, den Film auf diese Pixelanzahl zu skalieren und Bilder in Druckqualität oder Vektorgrafiken zu verwenden. Ansonsten haben Sie nur ein programmgesteuert skaliertes Bild, das nicht besser ist, als das 72dpi-Bild nur zum Drucken zu senden. Lange Rede, kurzer Sinn, Flash ist keine gute Print-Design-Plattform.

0

Ja, es sollte möglich sein. Sie können entweder die Größe Ihres Ausgabebildes reduzieren (dadurch die DPI erhöhen) oder eine Interpolation verwenden, um die effektive Auflösung von 72 DPI auf 300 DPI zu erhöhen.

1

Ich nehme an, Sie verwenden BitmapData.draw, um das Bild zu generieren? Wenn Sie das Bild nach oben skalieren (scaleX und scaleY), bevor Sie das Bild an eine BitmapData ausgeben, können Sie eine höhere Abtastrate = eine höhere DPI erhalten.

Wenn Sie nicht mehr Daten wünschen, nur Interpolation (wie McWafflestix vorschlägt), können Sie versuchen, eine Skala Matrix als zweiten Parameter zu draw zu verwenden.

0

Ja, Sie können, ich bin nicht sicher Flashplayer 9, aber ich denke, es funktioniert es

Hier ist meine Lösung, ist vielleicht schlecht oder dumm codding, aber es funktioniert

alles, was Sie brauchen, ist spiele mit jedem Gegenstand, den du mit 300 dpi machen musst irgendeine Art von

for(...) 
{ 
    var item:* = items[i] 
    item.x = item.x * delta_dpi 
    item.y = item.y * delta_dpi 
    item.width = item.width * delta_dpi 
    item.height = item.height * delta_dpi 

    if(item is TextArea) 
    // here you must increase sizes for text 
    [your_text_size] = [your_text_size] * delta_dpi 
    // and you need to apply new size to your area 

---------- 
    // in my case i used this function 
    if(item is TextArea) 
     item.htmlText = remakeText(item.htmlText) 

} 

function remakeText():String 
{ 
    var arr:Array = str.split('SIZE="')    
    var str:String 
    var i:int; 

    for(i=1; i < arr.length; i++) 
    { 
    str = arr[i] 
    var idx:int = str.indexOf('"') 
    var str2:String = str.substr(0, idx) 
    var nr:Number 
    if(to300) 
    nr = Number(str2) * 3.125 
    else 
    nr = Number(str2)/3.125 
    str = 'SIZE="' + nr + str.substring(idx) 
    arr[i] = str 
    } 

    str = '' 
    for(i=0; i < arr.length; i++) 
     str += arr[i] 

    return str 
}