我可以从Flash文件动态生成300 dpi图像吗?

时间:2009-07-14 23:07:29

标签: php flash actionscript image-processing dpi

我正在使用actionscript的getPixel和php的imagecreatetruecolor和imagesetpixel的组合来在浏览器中生成swf电影的png图像。

目前它将以与swf电影相同的分辨率输出72 dpi图像,但我被问及是否有可能生成300 dpi图像。

这可能吗?

4 个答案:

答案 0 :(得分:4)

Flash对分辨率或dpi一无所知。从具有正确像素数和打印质量的闪光输出图像的唯一方法是将电影缩放到该像素数量并使用打印质量图像或矢量图形。否则你只需要一个编程缩放的图像,这并不比仅仅将72dpi图像发送到打印更好。长话短说,flash不是一个好的打印设计平台。

答案 1 :(得分:1)

我假设您使用BitmapData.draw生成图片?如果您在将图片转储到scaleX之前向上缩放swf(scaleYBitmapData),则可以获得更高的采样率=更高的DPI。

如果您不想要更多数据,只需插值(如McWafflestix建议),您可以尝试使用比例Matrix作为draw的第二个参数。

答案 2 :(得分:0)

是的,它应该是可能的。您可以缩小输出图像的大小(从而增加DPI),也可以使用插值将有效分辨率从72 DPI提高到300 DPI。

答案 3 :(得分:0)

是的,你可以,我不确定flashplayer 9,但我认为它可以在那里工作

这是我的解决方案,也许是糟糕的,或者是愚蠢的编码,但它有效

您需要的只是玩300 dpi所需的每件物品 某种

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
}