我可以从Flash文件动态生成300 dpi的图像吗?
问题描述:
我使用actionscript的getPixel和php的imagecreatetruecolor和imagesetpixel的组合来生成浏览器中的swf电影的png图像。我可以从Flash文件动态生成300 dpi的图像吗?
目前它将以与swf电影相同的分辨率输出72 dpi图像,但我被问到可能生成300 dpi图像。
这可能吗?
答
Flash并不知道有关分辨率或dpi的任何信息。以正确数量的像素和打印质量从闪光灯输出图像的唯一方法是将电影缩放到该像素数量并使用打印质量的图像或矢量图形。否则,你只需要一个编程缩放的图像,这并不比发送72dpi图像打印更好。长话短说,闪光灯不是一个好的印刷设计平台。
答
是的,应该是可以的。您可以减小输出图像的大小(从而增加DPI),或者使用插值将有效分辨率从72 DPI增加到300 DPI。
答
我假设您使用BitmapData.draw
来生成图像?如果在将图像转储到BitmapData
之前缩放swf(scaleX
和scaleY
),则可以获得更高的采样率=更高的DPI。
如果您不想要更多数据,只需插值(如McWafflestix建议),则可以尝试使用比例Matrix
作为draw
的第二个参数。
答
当然可以,我不知道的Adobe Flash 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
}