我正在使用 actionscript 的 getPixel 和 php 的 imagecreatetruecolor 和 imagesetpixel 的组合在浏览器中生成 swf 电影的 png 图像。
目前它将以与 swf 电影相同的分辨率输出 72 dpi 图像,但有人问我是否可以生成 300 dpi 图像。
这可能吗?
我正在使用 actionscript 的 getPixel 和 php 的 imagecreatetruecolor 和 imagesetpixel 的组合在浏览器中生成 swf 电影的 png 图像。
目前它将以与 swf 电影相同的分辨率输出 72 dpi 图像,但有人问我是否可以生成 300 dpi 图像。
这可能吗?
Flash 并不真正了解分辨率或 dpi。从闪存输出具有正确像素数量和打印质量的图像的唯一方法是将您的电影缩放到该像素数量并使用打印质量图像或矢量图形。否则,您将获得一个以编程方式缩放的图像,这并不比仅发送 72dpi 图像进行打印更好。长话短说,flash 不是一个好的印刷设计平台。
我假设你BitmapData.draw
用来生成图像?如果在将图像转储到 a 之前将 swf 放大 (scaleX
和) ,则可以获得更高的采样率 = 更高的 DPI。scaleY
BitmapData
如果您不想要更多数据,只需要插值(如 McWafflestix 建议的那样),您可以尝试使用比例Matrix
作为draw
.
是的,这应该是可能的。您可以减小输出图像的大小(从而增加 DPI)或使用插值将有效分辨率从 72 DPI 增加到 300 DPI。
是的,你可以,我不确定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
}