Можно ли динамически генерировать изображение с разрешением 300 точек на дюйм из файла флэш-памяти? - PullRequest
2 голосов
/ 15 июля 2009

Я использую комбинацию из ActionScript getPixel и php's imagecreatetruecolor и imagesetpixel для создания png-изображения SWF-фильма в браузере.

В настоящее время он будет выводить изображение с разрешением 72 т / д при том же разрешении, что и фильм swf, но меня спросили о возможности создания изображения с разрешением 300 т / д.

Возможно ли это?

Ответы [ 4 ]

4 голосов
/ 15 июля 2009

Flash не знает ничего о разрешении или разрешении. Единственный способ вывести изображение со вспышки с правильным количеством пикселей и с качеством печати - это масштабировать фильм до такого количества пикселей и использовать изображения с качеством печати или векторную графику. В противном случае вы просто получите масштабированное изображение, которое не лучше, чем просто отправить изображение с разрешением 72 точек на дюйм на печать. Короче говоря, Flash не является хорошей платформой для дизайна печати. ​​

1 голос
/ 15 июля 2009

Я полагаю, вы используете BitmapData.draw для создания изображения? Если вы масштабируете swf up (scaleX и scaleY) перед тем, как вывести изображение в BitmapData, вы можете получить более высокую частоту дискретизации = более высокое DPI.

Если вам не нужны дополнительные данные, просто интерполяция (как предлагает McWafflestix), вы можете попробовать использовать шкалу Matrix в качестве второго параметра для draw.

0 голосов
/ 04 февраля 2010

да, можно, я не уверен насчет flashplayer 9, но я думаю, что он там работает

Вот мое решение, может быть, плохое или глупое кодирование, но оно работает

все, что вам нужно, это играть с каждым предметом, который вам нужно сделать с разрешением 300 точек на дюйм какой-то

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
}
0 голосов
/ 15 июля 2009

Да, это должно быть возможно. Вы можете либо уменьшить размер выходного изображения (тем самым увеличивая DPI), либо использовать интерполяцию для увеличения эффективного разрешения с 72 DPI до 300 DPI.

...