JP2016014921A - 情報処理装置、情報処理方法、およびプログラム - Google Patents

情報処理装置、情報処理方法、およびプログラム Download PDF

Info

Publication number
JP2016014921A
JP2016014921A JP2014135180A JP2014135180A JP2016014921A JP 2016014921 A JP2016014921 A JP 2016014921A JP 2014135180 A JP2014135180 A JP 2014135180A JP 2014135180 A JP2014135180 A JP 2014135180A JP 2016014921 A JP2016014921 A JP 2016014921A
Authority
JP
Japan
Prior art keywords
layer
image
rendering
information
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014135180A
Other languages
English (en)
Other versions
JP2016014921A5 (ja
JP6360370B2 (ja
Inventor
鈴木 智博
Tomohiro Suzuki
智博 鈴木
尚紀 鷲見
Hisanori Washimi
尚紀 鷲見
梅田 清
Kiyoshi Umeda
清 梅田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2014135180A priority Critical patent/JP6360370B2/ja
Priority to US14/739,196 priority patent/US9575702B2/en
Publication of JP2016014921A publication Critical patent/JP2016014921A/ja
Publication of JP2016014921A5 publication Critical patent/JP2016014921A5/ja
Application granted granted Critical
Publication of JP6360370B2 publication Critical patent/JP6360370B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1278Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
    • G06F3/1292Mobile client, e.g. wireless printing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1208Improving or facilitating administration, e.g. print management resulting in improved quality of the output result, e.g. print layout, colours, workflows, print preview
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1244Job translation or job parsing, e.g. page banding
    • G06F3/1247Job translation or job parsing, e.g. page banding by conversion to printer ready format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1253Configuration of print job parameters, e.g. using UI at the client
    • G06F3/1256User feedback, e.g. print preview, test print, proofing, pre-flight checks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Processing Or Creating Images (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】表示画像の印刷において画質の低下を防ぐ情報処理装置を提供する。【解決手段】アプリケーションの機能により表示された画像を印刷する場合、アプリケーションの実行の際にプロセッサで実行可能なように翻訳されてプロセッサにより実行されるスクリプト命令セットで構成された第1の層において、当該画像のオブジェクトの描画位置及びサイズを含む描画情報から、当該オブジェクトをレンダリングするためのレンダリング情報を決定する。そして、プロセッサで実行可能なように予め翻訳されている命令セットで構成された第2の層において、決定されたレンダリング情報に従って、オブジェクトをレンダリングする。【選択図】図6

Description

本発明は、画像処理を行う情報処理装置、情報処理方法、およびプログラムに関する。
近年、カメラ機能が搭載された可搬型多機能携帯電話(以下、モバイルコンピュータ)が普及し、デジタルカメラや従来のパーソナルコンピュータ(以下、PC)の販売台数を遥かに凌ぐ勢いで拡販されている。このようなモバイルコンピュータのシステムは、基本的には3つの要素で成り立っている。即ち、コンピュータ自身であるハードウェア、ハードウェア上で動作するオペレーティングシステム(以下、OS)、OS上で動作するアプリケーションである。ユーザは、アプリケーションを用いて、地図やメール、ブラウザを起動してインターネット上のウェブサイトを閲覧するなどの操作を行うことができる。このようなモバイルコンピュータ上で動作するアプリケーションの形態として、主に2つのものが存在する。ネイティブアプリケーションとウェブアプリケーションである。以下、それぞれの特徴を説明する。
ネイティブアプリケーションは、通常、OS毎に用意される開発環境や開発言語により開発される。例えば、A社が提供するOS上ではC/C++言語、B社が提供するOS上ではJava(登録商標)言語、C社が提供するOS上では更に異なる開発言語を用いる、といったようにOS毎に異なる開発言語で開発される。ネイティブアプリケーションは、各開発環境において予めコンパイルされ、人間が理解可能ないわゆる高水準言語から、コンピュータのCPUが解釈可能なアセンブラ等の命令セット群に変換される。このように、ネイティブアプリケーションには、命令を直接CPUが解釈することから高速動作が可能であるというメリットがある。
ウェブアプリケーションは、コンピュータ上のOSに標準的に組み込まれているウェブブラウザ上で動作するアプリケーションである。ウェブアプリケーションは、ウェブブラウザが解釈できるように、一般的には、HTML5、CSS、Javascript(登録商標)といった言語を用いて開発される。これらはウェブ標準言語であるため、一度アプリケーションを記述すれば、ウェブブラウザが動作する環境であればどこでも動作可能というメリットがある。特許文献1には、ウェブアプリケーションの形態の一例が記載されている。HTML5、CSS、JavaScriptで記述されたウェブアプリケーションの本体は、モバイルコンピュータ外部のサーバ上に存在する。ウェブアプリケーションは、利用時にサーバからモバイルコンピュータにインターネット回線を介してダウンロードされるため、ユーザは、ユーザインタフェース(UI)デザインなどを予めコンパイルすることなく動的に変更することができる。
近年、モバイルコンピュータは高解像度のカメラを保持することが多くなってきている。モバイルコンピュータは日常的に携帯され、かつ写真を数千枚程度記憶可能なメモリを備えているため、ユーザは高い頻度で気軽に写真撮影を楽しむことができる。このような写真画像に対して、例えばモノクロ・セピア調にするフィルタ処理を施したり、写真が暗い、色バランスが崩れている等の不具合を修正するための画像処理は、ユーザにとって極めて重要であり、必要不可欠なアプリケーションとなってきている。このような画像処理をユーザに対して、ストレスなく簡単に提供できることがアプリケーションにおいては重要である。
特開2011−233034号公報
ウェブアプリケーションは、一般的には、ブラウザのセキュリティ上の制約から、ブラウザ上でJavaScriptにより実行されるか、サーバ上で実行される。JavaScriptは、従来より、人間が視認可能な文字列のスクリプトとして記述され、スクリプトを動作時に随時コンパイルすることで実行することができる。しかしながら、高度で複雑な画像処理をJavaScriptで記述すると動作が遅くなるという問題がある。
引用文献1のように画像処理をサーバで実行するように構築した場合には、モバイルコンピュータ内部に存在する写真などのデータをインターネット回線を介してサーバ上にアップロードし、画像処理後の結果をダウンロードする時間が必要となる。これは、モバイルアプリケーションに対してストレスの少ない、即時的な処理を欲しているユーザにとっては大きな問題となる。それに加え、サーバでの処理はオフラインでは実行できないという問題がある。
上述したように、ネイティブアプリケーションには、処理を高速実行できるというメリットがある。しかしながら、ネイティブアプリケーションはOS毎に異なる開発言語で別々に開発する必要があるため、開発コストと開発時間が増大するという問題がある。また、ネイティブアプリケーションは、予めコンパイルする必要がある。そのため、例えばアプリケーションのUIデザインを動作時に変更したり、機能を動的に追加するといったことは難しく、柔軟性に欠けるという問題がある。
ここで、UIの全て若しくは大部分をHTML5、CSS3、Javascriptといったいわゆるウェブ標準言語で記述し、ウェブ標準言語で記述された内容から、ネイティブ言語で記述された機能を利用することができるアプリケーションを考える。このようなアプリケーションをモバイルコンピュータ上に実装することで、ウェブアプリケーションとネイティブアプリケーションの双方のメリットを実現するシステムをモバイルコンピュータ上で構築することができる。
そのようなシステム上で、例えば、写真印刷アプリケーションを動作させる場合を考える。そのようなアプリケーションでは、例えば、印刷対象となる写真を描画し、写真上に撮影日時などの日付情報を重畳し、絵文字などのスタンプ画像を重畳し、重畳した結果をプリントすることが行われる。印刷コンテンツの描画は、ウェブ標準言語を用いて記述される。例えば、HTML5のCanvasにより印刷コンテンツを生成する場合、まずCanvasで描画領域を確保し、drawImage関数を利用して写真やスタンプ画像を重畳してゆくことになる。例えば、写真、日付、スタンプ画像のそれぞれの画像を1枚のCanvasに描画する場合は、下記のようにdrawImage関数でコンテンツを上書きしていく。
<script>
var canvas = Canvasの作成
canvas.width = Canvasの横幅
canvas.height = Canvasの縦幅
var ctx = canvasにコンテンツを描画するためのコンテキストオブジェクトを取得
var img = PictureImage; //写真画像
ctx.drawImage(img, 〜); //img以降の引数で、画像のサイズや位置を指定
img = DateImage;//日付画像
ctx.drawImage(img, 〜); //日付画像を同じcanvasに重畳
img = StampImage;//スタンプ画像
ctx.drawImage(img, 〜); //スタンプ画像を同じcanvasに重畳
</script>
上記の印刷コンテンツを印刷するためには、プリンタの印刷エンジンが要求する画像データ(ビットマップデータ)へ変換する必要がある。この処理はレンダリング処理と呼ばれる。レンダリング処理では、上記アプリケーションのUI上で作成された、印刷コンテンツの表示領域からビットマップデータを取得する。
しかしながら、UI表示されている画像から取得するビットマップデータは一般的に低解像度であり、一方、印刷エンジンが要求する画像データは一般的に高解像度である。従って、表示用画像データから印刷用画像データへの拡大処理において、ジャギーや画像ボケが発生してしまう場合がある。そのような画像は、精鋭さを欠くものであり、印刷物として適切ではない。
本発明の目的は、このような従来の問題点を解決することにある。上記の点に鑑み、本発明は、表示画像の印刷において画質の低下を防ぐ情報処理装置、情報処理方法、プログラム及び記憶媒体を提供することを目的とする。
上記課題を解決するため、本発明に係る情報処理装置は、プロセッサと、アプリケーションの実行の際に前記プロセッサで実行可能なように翻訳され当該プロセッサにより実行されるスクリプト命令セットで構成された第1の層と、前記プロセッサで実行可能なように予め翻訳されている命令セットで構成された第2の層と、を有する階層構造を成し、前記第1の層と前記第2の層との連携により前記アプリケーションを実行するためのプログラムを記憶する記憶手段と、前記アプリケーションの機能により表示された画像を印刷する場合、前記第1の層において、当該画像のオブジェクトの描画位置及びサイズを含む描画情報から、当該オブジェクトをレンダリングするためのレンダリング情報を決定する決定手段と、前記第2の層において、前記決定手段により決定された前記レンダリング情報に従って、前記オブジェクトをレンダリングするレンダリング手段と、を備えることを特徴とする。
本発明によれば、表示画像の印刷において画質の低下を防ぐことができる。
携帯型情報端末のハードウェア構成を示すブロック図である。 携帯型情報端末のソフトウェア構成を示すブロック図である。 写真印刷処理の全体の手順を示すフローチャートである。 S301の写真画像選択の処理を示すフローチャートである。 S302の画像処理を示すフローチャートである。 S303のスタンプ画像追加の処理を示すフローチャートである。 S304のプリンタ設定の処理を示すフローチャートである。 S305のレンダリング処理を示すフローチャートである。 S306のプリント処理を示すフローチャートである。 写真印刷アプリケーション画面の一例を示す図である。 プリンタの設定UIの一例を示す図である。 写真印刷処理の全体の手順を示す他のフローチャートである。 S1204のスタンプ画像の特定の処理を示すフローチャートである。 S1205のスタンプ画像の操作処理を示すフローチャートである。
以下、添付図面を参照して本発明の好適な実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
[第1の実施形態]
以下、携帯型情報端末上で、ウェブアプリケーションの1つである写真印刷アプリケーションを動作させたときの動作について説明する。写真印刷アプリケーションでは、ユーザが選択した画像に対して様々な画像処理(例えば、輝度補正し、スタンプ画像を追加)を適用した後に、印刷対象のコンテンツを印刷する。なお、本実施形態においては、写真印刷アプリケーションは、後述するハイブリッド型アプリケーションとして提供されている。
[ハードウェア構成]
図1は、情報処理装置、特に、携帯型情報端末100のハードウェア構成の一例を示すブロック図である。同図において、CPU(中央演算装置)101は、各実施形態において説明する動作を、プログラムをROM102からRAM103に読み出して実行することにより実現する。ROM102は、CPU100により実行されるプログラム等を記憶するコンピュータ読取可能な記憶媒体である。RAM103は、例えば、CPU100によるプログラムの実行時に、各種データを一時的に記憶するためのワーキングメモリとして用いられる。2次記憶装置104は、例えばハードディスクやフラッシュメモリであり、例えば、画像ファイルや画像データ、画像解析などの処理結果を保持するデータベースなどを記憶する。タッチセンサ105は、タッチパネル上でのユーザの接触動作を検知するためのセンサである。ディスプレイ106は、写真印刷アプリケーション上の印刷設定画面等のユーザインタフェース画面や、画像処理結果などを表示する。ディスプレイ106は、タッチセンサ105を含んでも良い。
加速度センサ107は、加速度を検出するためのセンサであり、携帯型情報端末100の傾き等を検出する。外部インタフェース(IF)108は、携帯型情報端末100をプリンタ114と接続する。携帯型情報端末100は、外部IF108により、プリンタ115での印刷を行うことができる。また、携帯型情報端末100は、外部IF110により、インターネット116を介してプリンタ115での印刷を行うこともできる。外部IF109は、携帯型情報端末100を外部撮像デバイス(カメラ)114と接続する。外部撮像デバイス113や内部撮像デバイス111により撮像された画像データは、所定の画像処理後、2次記憶装置104に格納される。外部IF110は、無線LANを備えており、携帯型情報端末100をインターネット116と接続する。携帯型情報端末100は、外部IF110により、インターネット116を介して外部の各種サーバ117から画像データ等を取得することができる。携帯型情報端末100の動作に必要な電源は、バッテリ112から供給される。上記のCPU101〜バッテリ112は、システムバス(制御バス/データバス)113を介して相互に接続されており、CPU101は各部を統括的に制御する。
携帯型情報端末は、USBや、有線LANのような有線接続を行うための外部IFを含んでも良い。また、無線LANの他に、Bluetooth(登録商標)や赤外線通信のような無線接続を行うための外部IFを含んでも良い。無線LANによる接続形態においては、例えば、デバイス同士が直接接続される場合や、不図示の無線LANルータを介して通信先のデバイスと接続される場合がある。
[ソフトウェア構成]
図2は、写真印刷アプリケーション(以下、アプリケーション)を実行するための、携帯型情報端末100上でのソフトウェア構成の一例を示す図である。図2に示すソフトウェアの各ブロックは、CPU101により実現される。本実施形態においては、携帯型情報端末100のソフトウェアは、スクリプト層201、ネイティブ層202、OS層203の3つの階層構造を有する。アプリケーションの機能は、図2に示す各層の連携により実現される。スクリプト層201は、HTML5、CSS(Cascading Style Sheets)3、Javascriptといったウェブ標準言語により、テキストデータで各種命令(スクリプト命令セット)が記述されている。各種命令とは、例えば、コンテンツの描画や画像の表示、動画の再生等の命令である。また、スクリプト層201は、それらのテキストデータを保持している。記述されたスクリプトは、アプリケーション実行環境上に存在するプロセッサ(CPU101)によりテキスト命令群が翻訳されて実行される。翻訳は、実行の度に命令文を一行ずつ動的に翻訳する形態や、アプリケーションを起動したときに翻訳する形態、アプリケーションを携帯型情報端末100にインストールしたときに翻訳する形態などで行われる。以下、スクリプト層201で処理することやスクリプト層201での内容を単にスクリプトとも呼ぶ。スクリプトの命令をデバイス(携帯型情報端末100)内で翻訳する際には、例えば、後述するネイティブ層202やOS層203のインタプリタの機能が使用される。なお、本実施形態においては、アプリケーションのUIの大部分がスクリプトで記述される。
ネイティブ層202は、アプリケーション実行環境以外で予め翻訳(コンパイル)された処理命令セットを実行する部分である。ネイティブ層202は、例えばC/C++といった高水準言語で記述されたコードが予めアプリケーション開発者のPCやサーバ上でコンパイルされ、CPU101が直接解釈できる命令の集合体となっている。以下、ネイティブ層202で処理することやネイティブ層202での内容、OS層203の機能をネイティブ層202から呼び出すことを含めて単にネイティブとも呼ぶ。なお、ネイティブ層202の他の実装系としてはJavaがある。Javaは、C/C++と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳されている。翻訳された中間コードは、各OSが備えるJava仮想環境上で動作する。本実施形態においては、そのような形態も、ネイティブ層203の形態の1つである。
OS層203は、デバイスのオペレーティングシステム(OS)に対応する。OS層203は、ハードウェア機能の使用をアプリケーションに提供する役割や、OS固有の機能を有する。OS層203はAPIを備えており、スクリプト層201やネイティブ層202からOS層203の機能を使用することができる。
本実施形態では、上記のスクリプト層201からネイティブの機能の呼び出しを可能にすることをバインディング(又はバインド)と呼ぶ。各種ネイティブ機能はAPIを備えており、スクリプト層201は、APIを呼び出すことによりネイティブ機能を使用することができる。そのようなバインディング機能は、通常、各種OSが標準的に備えている。本実施形態では、スクリプト層201とネイティブ層202を両方含むアプリケーションを特にハイブリッド型アプリケーションと呼ぶ。ハイブリッド型アプリケーションでは、UIの全て若しくは大部分をHTML5、CSS3、Javascriptといったいわゆるウェブ標準言語で記述し、ウェブ標準言語で記述された内容から、ネイティブ言語で記述された機能を利用することができる。このようなハイブリッド型アプリケーションを携帯型情報端末100上に実装することで、ウェブアプリケーションとネイティブアプリケーションの双方のメリットを実現するシステムを携帯型情報端末100上で構築することができる。
以下、図2の各ブロックについて説明する。
●画像データの取得
スクリプト層201の画像取得部204は、ネイティブ層202に対して画像データの取得を依頼する。取得依頼方法は複数可能であり、例えば、ファイルの存在場所そのものを指定する絶対パス指定方法や、ダイアログ表示を促す方法などがある。ネイティブ層202の画像読込部205は、画像取得部204からの取得依頼に基づき、画像データを保持している領域であるネイティブ層202の画像群206から画像データを取得する。画像群206からの画像データの取得方法は、画像取得部204の依頼方法によって異なる。画像読込部205は、例えば、ファイルの絶対パスに基づき直接に画像データを取得したり、ダイアログ表示での選択に基づき画像データを取得する。
ネイティブ層202のデータ変換部207は、ネイティブ層202のデータをスクリプト層201で利用可能なデータ形式に変換する。逆に、データ変換部207は、スクリプト層201から送られてきたデータをネイティブ層202で利用可能なデータ形式に変換する。スクリプト層201のデータ変換部208は、スクリプト層201のデータをネイティブ層202で利用可能なデータ形式に変換する。逆に、ネイティブ層202から送られてきたデータをスクリプト層201で利用可能なデータ形式に変換する。本実施形態では、例えば、ネイティブ層202の画像読込部205により取得された画像データは、スクリプト層201で利用可能なBASE64データ形式に変換されてスクリプト層201に渡される。
●画像データの読込/保存
ネイティブ層202のデータ保持部209は、画像読込部205により読み込まれた画像データや、画像処理部210により画像処理が実行された画像データを保持する。ここで、保持される画像データはRGB展開されている。従って、画像読込部205により読み込まれて保持された画像データに対して、直ちに画像処理が実行可能である。ネイティブ層202のデータ保存部216は、必要に応じて、データ保持部209に保持されている画像データを画像群206に格納する。
●出力
スクリプト層201のレンダリング部219は、出力(表示/印刷)対象の画像のレンダリングについてのスクリプトを作成するためのブロックであり、コンテンツ描画部211、コンテンツ操作部212、画像処理制御部213を含む。本実施形態では、レンダリング部219でスクリプト作成途中の画像はディスプレイ106には表示されない。コンテンツ描画部211は、印刷対象のコンテンツを、ウェブ標準言語で記述する。スクリプト層201のコンテンツ操作部212は、画像の操作をスクリプトに反映する。画像の操作とは、例えば、画像の拡大、移動、回転である。コンテンツ描画部211による記述には、コンテンツ操作部212で操作された内容も反映される。ここで記述されたコンテンツのスクリプトは、後述するOS層203のインタプリタ218で解釈され、ディスプレイ106に表示される。画像処理制御部213は、画像処理に用いる補正パラメータ(例えば、輝度の補正値)と、補正対象となる画像を決定する。それらのデータは、必要に応じてスクリプト層201のデータ変換部208で、ネイティブ層202で利用可能なデータ形式に変換されてネイティブ層202に渡される。
ネイティブ層202の画像処理部210は、スクリプト層201の画像処理制御部213から指定された画像データに対して画像処理(輝度補正等)を実行する。その際、どのような画像処理を実行するかは、画像処理制御部213で設定された補正パラメータに従って決定される。画像データの指定については、例えば、スクリプト層201から画像データのパスを受け取る方法がある。
OS層203のタッチイベント部216は、ディスプレイ106へのユーザによるタッチに関する情報を取得する。タッチに関する情報とは、ディスプレイ上のタッチの検知、タッチされた位置情報などである。取得したデータは、ネイティブ層202を介してスクリプト層201のコンテンツ操作部212に送信される。例えば、ユーザがディスプレイ106上で所望のスタンプ画像を選択した情報は、タッチイベント部216により、ネイティブ層202を介してスクリプト層201のコンテンツ操作部212に送信される。
OS層203のインタプリタ218は、スクリプト層201で生成されたウェブ標準言語によるスクリプト命令を解釈・実行するブロックであり、画像の描画命令等はインタプリタ218により解釈され、ディスプレイ106への表示が実行される。また、インタプリタ218は、スクリプト層201で描画された印刷コンテンツを翻訳し、印刷解像度にレンダリングし、画像データをRGB画素値で出力する。図2では、インタプリタ218は、OS層203に構成されているが、ネイティブ層202に構成されても良い。
●プリンタとの通信
スクリプト層201のプリンタ制御部214は、レンダリング開始依頼、プリンタ検知の依頼、プリンタ設定画面の表示、プリント情報の生成及び送信を制御する。ここでのレンダリングとは、印刷に必要なビットマップデータを作成することをいう。プリンタ設定画面では、用紙のサイズ、用紙の種類、カラー/モノクロ印刷などの設定が可能である。ここで設定された項目に基づいて、ネイティブ層202のプリンタデータ生成部215は、プリント情報を生成する。
ネイティブ層202のプリンタデータ生成部215は、スクリプト層201のプリンタ制御部214からの依頼に基づき、プリンタ通信に必要なデータやコマンドを生成する。プリンタ通信に必要なデータとは、通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャンなど、プリンタの動作を決定するためのデータである。OS層203のプリンタ通信部217は、プリンタデータ生成部215から受け取ったデータを、接続されているプリンタ115に送信するためのインタフェースである。
[全体フロー]
図3は、本実施形態における写真印刷処理の全体の手順を示すフローチャートである。図3の処理は、例えば、CPU101がROM102からプログラムをRAM103に読み出して実行することにより実現される。図10は、本実施形態におけるスクリプトで記述された写真印刷アプリケーション画面の一例を示す図である。
S301において、CPU101は、ユーザによる写真画像選択ボタン1001の押下(タッチ操作も含む。以下同様)を検出し、画像の選択を受け付ける。画像の選択を受け付けると、CPU101は、描画領域1006の全体に、選択された画像を表示する。
S302において、CPU101は、ユーザによる、スライドバー1002を用いた、画像処理時に利用する補正パラメータ(例えば、輝度補正値)を検出する。CPU101は、検出した補正パラメータに従って、画像に対して画像処理を実行し、描画領域1006の全体に画像を表示する。
S303において、CPU101は、ユーザによる、スタンプ追加ボタン1003の押下を検出すると、スタンプ画像一覧を表示する。そして、CPU101は、ユーザによる所望のスタンプ画像の選択を受け付け、描画領域1006上にスタンプ画像を追加・表示する。
S304において、CPU101は、ユーザによる、プリントボタン1005の押下を検出すると、プリントに必要な情報の設定UIをディスプレイ106に表示する。ここで、プリントに必要な情報とは、例えば、用紙サイズ、両面、モノクロ・カラー印刷などの情報である。図11に、プリンタの設定UIの一例を示す。
S305において、CPU101は、ユーザによる、設定完了ボタン1102の押下を検出すると、印刷に必要なビットマップデータを作成するレンダリングを開始する。CPU101は、描画領域1006に表示されている画像について、プリント解像度での画像データを作成する。
S306において、CPU101は、S305でプリント解像度で作成された画像データを、プリンタ制御のコマンドと共にプリンタ115に送信し、プリンタ115から印刷物を出力させる。
上記では、説明上、必要最小限のフローを記載しているが、特に上記の処理の流れに限定されるものではない。以下、各工程での詳細な動作を説明する。
[写真画像選択]
上述のように、ユーザによる写真画像選択ボタン1001の押下を検出することにより、S301の処理が開始する。図4は、S301の写真画像選択の処理を示すフローチャートである。図4のS401、S402、S409〜S411は、スクリプト層201により実行される処理であり、S403〜S408は、ネイティブ層202により実行される処理である。他のフローチャートにおいても同様に示す。
S401において、スクリプト層201の画像取得部204は、取得対象の画像データを識別するための一意なIDを生成する。IDは、数値や文字列など、スクリプト層201からネイティブ層202へ送信できる形式であればどのような形式でも良い。
S402において、スクリプト層201の画像取得部204は、ネイティブ層201にIDを渡すとともに画像選択を依頼する。その依頼の方法として、スクリプト層201からネイティブ層202固有の画像選択APIを直接呼び出すようにしても良い。ここで、ネイティブ層202固有の画像選択APIを直接呼び出せない場合には、ネイティブ層202にラッパーを用意しておいても良い。ラッパーとは、スクリプト層201から呼び出せる関数をネイティブ層202に予め用意しておき、ネイティブ関数内でネイティブ層202固有の関数を呼び出す方法である。また、画像選択APIは、IDを例えば引数として渡す仕組みを備えている。そのような構成により、スクリプト層201は、ネイティブ層202へIDを渡すことができる。
S403において、ネイティブ層202では、デバイス固有の画像選択UIがディスプレイ106に表示されるよう表示制御が行われる。画像読込部205は、ユーザによる、表示された画像選択UI上での画像の選択を受け付ける。画像の選択は、脱着可能な記憶媒体内の画像の選択でも良いし、携帯型情報端末100のカメラ機能が用いられて撮影された画像データであっても良い。
S404において、ネイティブ層202の画像読込部205は、選択された画像に対応する画像データを画像群206から取得する。画像データの取得は、例えば、画像ファイルのダウンロードやコピーによって行われる。また、ファイルオープンは、ネイティブ層202の使用言語に応じたものにより行われる。
S405において、ネイティブ層202のデータ保持部209は、取得した画像データをRGB展開して保持する。本実施形態において、RGBデータで保持されているが、これに限定されるものではない。例えば、ビットマップデータであれば、JPEG(Joint Photography Expert Group)、PNG(Portable Network Graphics)、RGBA形式などで保持するようにしても良い。ここで、RGBA形式とは、画像データのRGB(赤、緑、青)に、透明度としてAを組み合わせたデータ形式である。
S406において、ネイティブ層202のデータ保持部209は、展開されたRGBデータをS403で受信したIDと関連付けて記憶する。関連付けの方法として、例えば、IDとRGBデータを持つオブジェクトを作成することにより、IDによるRGBデータの特定を可能にしても良い。また、IDとRGBデータとの対応付けは、IDとRGBデータと対にすることに限定されるわけではなく、例えば、IDとRGBデータのパスとを関連付ける方法を用いてもよい。その他にも、RGBデータの先頭アドレスや、RGBデータを呼び出す関数と関連付ける方法などが用いられても良い。
S407において、S405で取得したRGBデータに基づいて、スクリプト層201で対応している形式に変換可能な画像データが生成される。本実施形態においては、例えばJPEG形式の画像データが生成される。RGBデータからJPEGデータへの変換には、OSが有するエンコーダが用いられる。
S408において、ネイティブ層202のデータ変換部207は、JPEGデータをBASE64データに変換する。これは、スクリプト層201では、RGBデータ配列やJPEGのバイナリデータをそのまま利用できず、スクリプト層201が利用可能な形式にデータを変換する必要があるためである。本実施形態では、JavaScript(登録商標)が用いられている場合には、スクリプト層201で扱う画像データはBASE64形式であるとする。BASE64とは、バイナリデータを文字列データとして扱うためのエンコード方式である。
S409において、スクリプト層201のデータ変換部208は、ネイティブ層202のデータ変換部207から、S408で変換されたBASE64データを受け取る。そして、BASE64データを表示するための領域がRAM103に確保される。本実施形態では、メモリの確保のために、例えば、HTMLのCanvas機能が用いられ、画像の描画は、Canvasの持つContextオブジェクトのAPIにより行われる。
S410において、スクリプト層201の画像処理制御部213は、補正パラメータを生成し、その補正パラメータを初期化する。補正パラメータとは、S302の画像処理の内容を決定するパラメータ群を保持するオブジェクトである。ネイティブ層202でどのような画像処理が実行されるかは、補正パラメータに応じて決定される。JavaScriptでは、例えば、下記のような補正パラメータが生成される。
var CorrectionParam = function(){
this.brightness = 10;
}
上記の補正パラメータは、CorrectionParamオブジェクトの中に、明るさ補正用にbrightnessという変数名と、brightnessには10という値が格納されているということを表している。説明上、補正パラメータは、明るさ補正用のみとして示しているが、その他の補正処理用のパラメータを追加することにより、画像処理の種類を増やすことができる。
S411において、スクリプト層201の画像処理制御部213は、描画領域1006での描画するデータにネイティブ層202から受け取ったBASE64データを指定する。これにより、OS層203のインタプリタ218がスクリプトを解釈し、描画領域1006に画像を表示することができる。下記に、描画領域1006にBASE64データを反映させるためのコードの一例を示す。
var base64Data = ネイティブからのBASE64データ
var canvas = document.createElement("canvas");//画像の描画領域確保
canvas.setAttribute("width", 100);//描画領域の大きさ設定
canvas.setAttribute("height", 100);
canvas.setAttribute(“id”, “ImageID”);//canvasにIDをつける
var context = canvas.getContext("2d");//描画領域に描画するAPIを持つオブジェクトの生成
var img = new Image();//Imageオブジェクトの生成
img.src = base64Data;//画像のURIを受け取ったBASE64データとする
img.onload = function(){//画像のロードが終わってから処理を開始する
context.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);//contextオブジェクトのメソッドを用いて画像を描画領域に描画
document.getElementById("div").appendChild(canvas);}
本実施形態では、Canvasが何層にもなるレイヤ構造を用いている。それらのCanvasは、描画/移動/拡大などの操作が特定されると、divで指定される描画領域1006に対して順次追加されていく。通常、Canvasは1枚の画像として扱われるので、Canvasに写真画像を描画した後にスタンプ画像などを追加すると、スタンプ画像と合わせて1枚の画像とされる。それに対して、本実施形態では、レイヤ構造を用いてCanvasを重ねて表示するので、ユーザに対して1枚の画像のように表示するが、実際の描画物はそれぞれ独立したものとなっている。例えば、HTMLのDOM(Document Object Model)のように、divの領域内にCanvasオブジェクトが複数存在する形態である。以下に一例を示す。
<div width = 100 height = 100>
<canvas id=”ImageID” width=100 height=100 style="position:absolute;left:0px; top:0px;"></canvas>
<canvas id=”Stamp” width=10 height=10 style="position:absolute;left:10px; top:10px;"></canvas>

</div>
1つ目のCanvasは、縦幅100、横幅100のdiv領域に対して、縦幅100、横幅100で追加されている。つまり、表示領域全体に対してCanvasが重なっているということであり、写真画像は全体表示される。2つ目のCanvasは、縦幅10、横幅10の大きさ、div左上の頂点を基準とした時の(10,10)の座標に追加されている。それぞれのCanvasは独立しており、また、それぞれに一意なIDが指定されている。スクリプトによる操作や、特定のCanvasの情報を取得する際には、対応するIDが用いられる。例えば、2つ目のCanvasの縦幅は、以下の操作で取得することができる。
var width = document.getElementById(“Stamp”).width;
[画像処理]
ユーザによるスライドバー1002の設定を検出することにより、図3のS302の処理が開始する。図5は、S302の画像処理を示すフローチャートである。
S501において、スクリプト層201の画像処理制御部213は、S410で生成された補正パラメータの値(例えば、brightness。以下同様とする。)を、スライドバー1002で設定された値に更新する。
S502において、スクリプト層201の画像処理制御部213は、インジケータを起動してディスプレイ106に表示するよう処理する。ここで、インジケータとは、データ処理中にディスプレイ106に表示される、作業状態を表すアイコンである。
S503において、スクリプト層201のデータ変換部208は、補正パラメータをネイティブで利用可能なJSON文字列に変換する。これは、補正パラメータは上記のようにオブジェクト形式であり、ネイティブ層202では解釈することができないからである。変換されたJSON文字列は、S401で生成された画像データを識別するためのIDと共にネイティブ層202へ渡される。
S504において、ネイティブ層202の画像処理部210は、文字列として受け取ったJSONデータをパース(解析)する。パースには、OSに備えられているパーサーが用いられる。ネイティブ層202の画像処理部210は、パースにより、補正パラメータ内のbrightnessの値を取得する。
S505において、ネイティブ層202の画像処理部210は、スクリプト層201から送信されたIDに基づいて、S405でRGB展開された画像データ(RGBデータ)を特定する。前述のように、IDと画像データとの対応付けは、IDと画像データとを対にすることに限定されるわけではなく、例えば、IDと画像データのパスとを関連付ける方法により行われても良い。また、IDと、画像データの先頭アドレスや画像データを呼び出す関数などを関連付ける方法により行われても良い。
S506において、ネイティブ層202の画像処理部210は、取得した補正パラメータから実行すべき画像処理を決定し、S505で特定された画像データに対して補正パラメータに対応した画像処理を行う。本実施形態では、輝度補正のパラメータにより、全ての画素のRGB値に10が加算されるとする。
ここで、補正パラメータに他の情報を追加することにより、画像処理の種類を増やすようにしても良い。例えば、公知のモノクロ変換、公知のセピア色変換、ImageFix、RedeyeFix、SmartSkinなどの画像処理を追加するようにしても良い。ImageFixとは、写真画像を、人物顔検出やシーン解析を用いて自動で解析し、適切な明るさやホワイトバランス調整を行う処理である。また、RedeyeFixとは、画像中から自動で赤目画像を検出して補正する処理である。また、SmartSkinとは、写真画像から人物の顔を検出して、その顔の肌領域を好適に加工する処理である。また、画像処理は、OS層203が提供する機能により実行されても良い。また、取得した補正パラメータから実行可能な複数の画像処理をプルダウンメニュー表示し、ユーザ選択を受け付けるようにしても良い。
S507において、S506で画像処理が実行された画像データに基づいて、スクリプトで対応しているフォーマットに変換可能な画像データが生成される。本実施形態においては、例えばJPEGの画像データが生成される。
S508において、ネイティブ層202の画像処理部210は、スクリプト層201にインジケータの停止を依頼する。これは、例えば、ネイティブ層202から、スクリプト層201で定義されているインジケータ停止の関数を呼び出すことで行われる。
S509において、スクリプト層201の画像処理制御部213は、インジケータを停止させてディスプレイへの表示を停止する。一方、S510において、ネイティブ層202のデータ変換部207は、JPEGデータをBASE64データに変換し、スクリプト層201に送信する。
S511において、スクリプト層201のデータ変換部208は、ネイティブ層202からS508で変換されたBASE64データを受け取る。その後、スクリプト層201の画像処理制御部213は、描画領域1006での描画するデータにネイティブ層202から受け取ったBASE64データを指定する。これにより、OS層203のインタプリタ218がスクリプトを解釈し、描画領域1006に画像処理が実行された画像が表示される。
本実施形態では、スライドバー1002の変化によって画像処理が開始されると説明したが、その形態に限定されるものではない。例えば、画面上にプラスボタン、マイナスボタンが配置され、ユーザがそのボタンを押すごとに明るさが調整されるという形態でも良い。他にも、画像の右半分がタッチされたら明るさを増す、左半分がタッチされたら暗くするなど、ユーザのタッチイベントと連動させた形態でも良い。また、ユーザ操作で補正パラメータだけ変化させておき、画像処理の実行指示を受け付けたときに、全ての画像処理が一括して行われるという形態でも良い。
[スタンプ画像追加]
ユーザによるスタンプ追加ボタン1003の押下を検出し、ハートスタンプ画像1008の選択を検出することにより、S303の処理が開始する。図6は、S303のスタンプ画像追加の処理を示すフローチャートである。
S601において、スクリプト層201の画像取得部204は、スタンプを識別するための一意なIDを生成する。IDは、数値や文字列など、スクリプト層201からネイティブ層202へ送信できる形式であればどのような形式でも良い。
S602において、スクリプト層201の画像取得部204は、S601で生成されたIDと、スタンプ画像として用いられる画像の絶対パスとをネイティブ層202に送信し、画像取得を依頼する。
S603において、ネイティブ層202の画像読込部205は、スクリプト層201から受け取った画像の絶対パスに基づいて、デバイス固有のAPIにより画像データを取得する。
S604において、ネイティブ層202のデータ保持部209は、取得した画像データをRGB展開して保持する。
S605において、ネイティブ層202のデータ保持部209は、S406と同様に、RGB展開された画像データと、S602で受信したIDとを関連付けて記憶する。
S606において、S604で取得したRGBデータに基づいて、スクリプトで対応しているフォーマットに変換可能な画像データが生成される。本実施形態においては、例えばJPEGの画像データが生成される。RGBデータからJPEGデータへの変換には、OSが有するエンコーダが用いられる。
S607において、ネイティブ層202のデータ変換部207は、JPEGデータをBASE64データに変換し、スクリプト層201に送信する。
S608において、スクリプト層201のデータ変換部208は、ネイティブ層202からS607で変換されたBASE64データを受け取る。そして、BASE64データを表示するための領域がRAM103に確保される。メモリの確保のためには、例えば、HTMLのCanvas機能が用いられる。
S609において、スクリプト層201の画像処理制御部213は、オブジェクトパラメータを生成し、そのオブジェクトパラメータを初期化する。オブジェクトパラメータとは、描画の際に用いられるパラメータを保持するオブジェクトである。JavaScriptでは、例えば、下記のようなオブジェクトパラメータが生成される。
var ObjectParam = function(){
this.posX = 10;
this.posY = 10;
this.width = 100;
this.height = 100;
this.ImageData = BASE64Data;
}
このオブジェクトパラメータは、ObjectParamオブジェクトの中に、基準点からのx座標を示すposX変数名が含まれ、posXには10という値が格納されているということを表している。ここで、基準点とは、描画領域1006の左上の座標1010である。同様に、posYは、描画領域1006の左上を基準点としたときのy座標、widthはスタンプ画像の描画領域1009の横幅、heightは描画領域1009の縦幅を表している。また、BASE64Dataは、ネイティブ層202から受け取った画像データである。
つまり、本実施形態では、オブジェクトパラメータが描画物オブジェクトに対応する。本実施形態では説明上、オブジェクトパラメータとして、描画物のサイズ、位置、画像データを示している。しかしながら、その他のパラメータ(回転角度、平行移動量、拡大倍率など)を追加して、描画、レンダリング、オブジェクト操作時に利用できるようにしても良い。また、描画オブジェクトに対する情報保持の方法も、本実施形態に限定されるものではない。
S610において、スクリプト201の画像処理制御部213は、描画領域1006で描画するデータとして、ネイティブ層202から受け取ったBASE64データを指定する。これにより、OS層203のインタプリタ218がスクリプトを解釈し、S609で初期化されたオブジェクトパラメータに基づいて、描画領域1006に画像を表示することができる。
本実施形態では説明上、スタンプ画像が1つのみであるが、スタンプ画像を複数個扱うようにしても良い。また、本実施形態では、スタンプ画像として予め用意した画像データを用いているが、CanvasのContextオブジェクトを用いて描画物をスクリプトで生成する方法を用いても良い。その場合には、S602において、Contextオブジェクトを用いて生成された描画物がネイティブ層202に送信され、データ保持部209は、その描画物をRGBデータとして保持する。
[プリンタ設定]
ユーザによるプリントボタン1005の押下を検出することにより、S304の処理が開始する。図7は、S304のプリンタ設定の処理を示すフローチャートである。
S701において、スクリプト層201のプリンタ制御部214は、ネイティブ層202にプリンタ情報の取得を依頼する。依頼の方法として、例えば、バインディング機能によりスクリプト層201からネイティブ層202固有のAPIを呼び出す。その場合、ネイティブ層202には、スクリプト層201から直接呼び出せる関数、もしくはその関数を間接的に呼び出すいわゆるラッパーを予め用意しておく。例えば、GetPrinterInfoというネイティブ関数を用意しておき、スクリプト層201からその関数を呼び出す。
一般的に、機密情報の保証が難しい等のセキュリティ上の制限のために、スクリプト層201から外部の機器と直接通信することはできない。そのため、本実施形態では、スクリプト層201は、一旦、ネイティブ層202へ依頼することにより、ネイティブ層202を介して外部の機器と通信を行う。
S702において、ネイティブ層202のプリンタデータ生成部215は、対応する関数が呼び出されると、プリンタ115の検出、いわゆるディスカバリを行う。ここでは、通信可能なプリンタ115の検出を行うために、Bonjourなどのプロトコルが用いられる。プリンタ115の検出は、例えば、同じ無線LANルータで接続されているプリンタにおいて行われる。
S703において、ネイティブ層202のプリンタデータ生成部215は、ブロードキャストやマルチキャスト等の方法で応答のあったプリンタ115のIPアドレスを記憶する。
S704において、ネイティブ層202のプリンタデータ生成部215は、S703で応答のあったプリンタ115のIPアドレスへプリンタ情報の提供を要求するためのコマンドを生成する。応答のあったプリンタが複数の場合には、プリンタデータ生成部215は、全てのプリンタに対して情報の提供を要求する。コマンドとは、プリンタの動作を指定する命令であり、例えば、XML(Extendable Markup Language)により下記のように記述される。
----------------------------------------------
01: <?xml version="1.0" encoding="utf-8" ?>
02: <cmd xmlns:trans="http://www.xxxx/yyyyy/">
03: <contents>
04: <operation>GetPrinterInfo</operation>
05: </contents>
06: </cmd>
----------------------------------------------
上記各行の左側に書かれている「01:」などの数値は説明を行うために付加した行番号であり、本来のXML形式のテキストには記述されない。
1行目はヘッダであり、XML形式で記述していることを表している。
2行目のcmdは、コマンドの開始を意味する。xmlnsで名前空間を指定し、コマンドの解釈の定義を指定している。なお、6行目の</cmd>は、コマンドの終了を示している。
3行目は以降に内容を記述する宣言であり、5行目はその終了を示している。
4行目には要求する命令が記述されており、<operation>と</operation>の間に実際の命令文言が存在する。命令文言であるGetPrinterInfoは、外部デバイスであるプリンタ115の情報を取得する命令である。例えば、プリンタ115が対応している用紙種類、サイズ、縁なし印刷機能の有無、印刷品位、などのプリンタ情報を提供するよう要求する内容が記述されている。
なお、上記のコマンド生成は、予めROM102などに記憶した固定のテキストを読み込むようにしても良い。また、コマンドは、XMLなどのテキスト形式に限らず、バイナリ形式で記述され、それに従ったプロトコルで通信されるようにしても良い。生成されたコマンドは、送信先のプリンタが対応しているプロトコルに従った形式で、OS層203のプリンタ通信部217を介してプリンタ115へ送信される。プリンタ115との通信の方法は、上記に限られず、例えば、Wi−FiダイレクトやBluetooth、赤外線通信、電話回線、有線LAN、USBを用いた接続でも良い。
上記では、ネイティブ層202でコマンドの生成が行われると説明したが、スクリプト層201でコマンドの生成が行われるようにしても良い。その場合、スクリプト層201で上記のXML形式の命令文が作成されてネイティブ層202へ渡される。その後、上記と同様に、通信プロトコルに従った形式でプリンタ115のIPアドレスへ送信される。
上記のコマンドを受信したプリンタ115は、プリンタ情報を通信プロトコルに従ってXML形式でネイティブ層202へ送信する。以下、プリンタ情報の一例を示す。
----------------------------------------------
01: <?xml version="1.0" encoding="utf-8" ?>
02: <cmd xmlns:trans="http://www.xxxx/yyyyy/">
03: <contents>
04: <device id=”Printer001” />
05: <mode = 1>
06: <media>GlossyPaper</media>
07: <size>A4</size>
08: <quality>1</quality>
09: <border>no</border>
10: </mode>
11: <mode = 2>
〜中略〜
</mode>
<mode = 3>
〜中略〜
</mode>
〜中略〜
</contents>
</cmd>
----------------------------------------------
1行目はヘッダであり、XML形式で記述していることを表している。
2行目のcmdは、コマンドの開始を意味する。xmlnsで名前空間を指定し、コマンドの解釈の定義を指定している。なお、最下行の</cmd>はコマンドの終了を示している。
3行目は以降に内容を記述する宣言であり、下の</contents>までその内容が続く。
4行目はデバイスIDを示し、そのプリンタの機種名が「Printer001」であることを表している。
5行目以降は、各モードについて記述されている。<mode>から</mode>まで、対応するモードの情報が記述されている。5行目では、モードの番号は1である。以降の<media>は印刷用紙の種類、<size>は用紙サイズ、<quality>は印刷品位、<border>は縁あり/なしの情報がそれぞれ記述されている。
11行目以降は、他のモードであるモード2についての情報が記述されている。このように、プリンタの機種名と、そのプリンタが対応している全ての印刷モードがXML形式で記述されている。なお、プリンタ情報の記述方法は、これに限定されず、例えば、タグ形式でないテキストや、バイナリ形式などであっても良い。また、上記ではプリンタの印刷機能の情報を受け渡ししているが、それに限定される事ではない。例えば、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報でも良い。画像処理の例としては、モノクロやセピア、彩度強調などの色変換、複数画像のレイアウト、ホワイトバランス補正、ノイズ除去、その他自動で写真を好ましい色や輝度に補正する処理などが挙げられる。
S705において、ネイティブ層202のプリンタデータ生成部215は、OS層203のプリンタ通信部217を介してプリンタ115からプリンタ情報を受け取る。そして、プリンタデータ生成部215は、受け取ったプリンタ情報から、全てのモードにおける印刷用紙の種類、サイズ、印刷品位、縁あり/なしの項目と項目数を取得する。
S706において、ネイティブ層202のプリンタデータ生成部215は、プリンタ情報をスクリプト層201が解釈可能な形式でスクリプト層201へ送る。例えば、ネイティブ層202のプリンタデータ生成部215は、受け取ったXML形式で送ったり、若しくは、タグなしのテキスト形式に変えて送る。また、スクリプト層201から特定のネイティブ関数を呼び出す毎に戻り値として情報を送信するようにしても良いし、ネイティブ関数に取得するモードなどの引数を渡しておき、戻り値として情報を送信するようにしても良い。また、JSON文字列を用いた受け渡しや、データ変換部207及び208により、BASE64などの文字列で受け渡しを行っても良い。
S707において、スクリプト層201は、受け取ったプリンタ情報に基づいて、表示画面を形成してディスプレイ160に表示するよう処理する。ここで、接続可能なプリンタが複数ある場合には、スクリプト層201は、複数のプリンタ名をユーザに選択可能に表示するよう処理する。なお、プリンタの選択は、上記に限られず、例えば、一番早く応答してきたプリンタや、より機能が多いプリンタ、印刷ジョブが混んでいないプリンタ、などに基づいて選択されるようにしても良い。
S708において、スクリプト層201は、印刷用紙の種類・サイズ、印刷品位、縁あり/なし、などを選択させる印刷設定画面をディスプレイ160に表示するよう処理する。印刷設定画面の形成方法の一例として、以下に、HTML/JavaScriptの記述を示す。
------------------------------------------------
<!DOCTYPE html>
<head>
<title>印刷設定 </title>
<script>
<!-- 用紙サイズ -->
var PaperSizeNum = GetPaperSizeNum();
var p = document.getElementById("PaperList");
var i;
for(i=0; i<PaperSizeNum; i++){
p.options[i] = new Option(GetPaperSize(i), GetPaperSize(i));
}
<!-- 用紙種類-->
var MediaTypeNum = GetMediaTypeNum();
var m = document.getElementById("MediaList");
var j;
for(j=0; j<MediaTypeNum; j++){
m.options[i] = new Option(GetMediaType(j),GetMediaType(j));
}
<!-- 印刷品位 -->
var QualityNum = GetQualityNum();
var q = document.getElementById("QualityList");
var k
for(k=0; k< QualityNum; k++){
q.options[i] = new Option(GetQuality(k), GetQuality(k));
}
<!-- 縁あり/なし-->
var BorderNum = GetBorderNum();
var b = document.getElementById("BorderList");
var l;
for(l=0; l<BorderNum; l++){
b.options[i] = new Option(GetBorder(l),GetBorder(l));
}
<!-- 印刷関数-->
function printer() {
SetPrint(document.getElementById("PaperList").value,
document.getElementById("MediaList").value,
document.getElementById("QualityList").value,
document.getElementById("BorderList ").value);
}
</script>
</head>
<!-- 表示部 -->
<body>
用紙サイズ:<select id="PaperList"></select><br />
用紙種類: <select id="MediaList"></select><br />
印刷品位: <select id="QualityList"></select><br />
縁なし: <select id="BorderList"></select><br />
<br />
<button id="btn1" onclick="printer()">印刷設定完了</button>
</body>
</html>
------------------------------------------------
上記のGetPaperSizeNum()、GetMediaTypeNum()、GetQualityNum()、GetBorderNum()はネイティブ関数であり、それぞれの項目がいくつあるかを取得する機能を備える。例えば、プリンタが対応している用紙サイズがA4、A5、B5、L判の4種類の場合、GetPaperSizeNum()は4を返す。
GetPaperSize(n)、GetMediaType(n)、GetQuality(n)、GetBorder(n)もネイティブ関数であり、引数nの値番目の文字列を返す。例えば、用紙サイズを返す関数のGetPaperSize(0)の返り値は「A4」であり、GetPaperSize(1)の返り値は「A5」である。これらの値は、ネイティブ層202が、プリンタ115からOS層203を介して送られてきた情報から取得する。また、これらの文言は、プリンタ115から送られてきた情報と結び付けてネイティブ層202が決定する。例えば、プリンタ115から送られてきた情報より取り出した値が「GlossyPaper」であった場合、表示するテキストは「光沢紙」と決定する。決定の方法として、ネイティブ層202は、これらの対応表を予め保持しておき、その対応表に従ってテキストを決定すれば良い。
なお、上記では例として用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定を行う仕様であるが、これに限定されず、他の設定、例えば、両面/片面、カラー/モノクロ、画像補正のオン/オフ等があっても良い。また、前述のように印刷機能のみではなく、プリンタ115が処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を表示しても良い。
上記の例のように取得した情報に基づきWebレンダリングエンジンを用いて、例えば、図11に示す印刷設定画面1101のようなユーザインタフェースが実現される。つまり、本実施形態では、スクリプト層201は、ネイティブ層202を介して外部のプリンタ115にプリンタ情報を要求し、ネイティブ関数を用いて取得した情報に基づいて印刷設定画面をディスプレイ106に表示する。なお、上記HTMLは、スクリプト層201とネイティブ層202のいずれで作成するようにしても良い。図11に示すように、用紙サイズなどはプルダウンメニューになっており、ユーザの項目を選択するタッチ操作を受け付けることができる。
設定完了ボタン1102の押下を検出すると、S709において、スクリプト層201のプリンタ制御部214は、S708でユーザが選択した各プリント情報を、ネイティブ層202へ送信する。上記HTMLの例にあるSetPrint()は、取得したプリンタ設定情報を引数としてネイティブ関数を呼び出している。上記の例では用紙サイズ、用紙種類、印刷品位、縁あり/なしの各設定を文字列としてネイティブ層202へ渡している。
S710において、ネイティブ層202のプリンタデータ生成部215は、スクリプト層201から送信されたプリント情報を取得する。プリンタデータ生成部215は、取得したプリント情報に基づいて、プリンタの通信プロトコルに従って印刷コマンドを生成し、OS層203のプリンタ通信部217を介してプリンタ115へ送信する。
[レンダリング]
ユーザによる印刷設定画面1101の設定完了ボタン1102の押下を検出することにより、S305の処理が開始する。図8は、S305のレンダリング処理を示すフローチャートである。
S801において、スクリプト層201のプリンタ制御部214は、インジケータの起動をOS層203に依頼する。S802において、OS層203は、インジケータをディスプレイ106に表示する。
S803において、スクリプト層201のプリンタ制御部214は、S709で設定されたプリント情報に基づいて、印刷する用紙サイズに対応する出力サイズを決定し、その出力サイズをOS層203に渡す。
S804において、OS層203は、受け取った出力サイズに対応する出力画像領域をRAM103に確保する。ここで、出力画像領域とは、1つのCanvas領域である。この出力サイズのCanvasに対して、先述の各Canvas(写真画像、追加されるスタンプ画像等)を、サイズ・領域内の位置がディスプレイ106への表示画像と印刷画像とで相対的に合うように合成していく。
S805において、スクリプト層201のプリンタ制御部214は、OS層203に対して写真画像の描画を依頼する。その際、プリンタ制御部214は、写真画像がS804で確保された出力画像領域全体に描画されるように依頼する。画像の描画は、Canvasであれば、ContextオブジェクトのdrawImageメソッドを用いて行われる。また、写真画像データは、オブジェクトパラメータのImageDataで表される。
S806において、OS層203のインタプリタ218は、描画依頼されたスクリプトを解釈し、写真画像のレンダリングを行う。S807において、OS層203は、S804で確保された出力画像領域に対して、レンダリング後の画像データを格納する。ここで、図8のS807の「出力画像領域に反映」とは、上記のようにS804で確保された出力画像領域(メモリ)に変更を加えることであり、ディスプレイ106上に画像を表示することではない。
S808において、スクリプト層201の画像処理制御部213は、スタンプ画像について、オブジェクトパラメータによるレンダリング条件の変更をスクリプトで記述する。レンダリング条件の変更とは、例えば、描画領域1006をA4サイズ等の印刷領域に変倍する際のスタンプ画像の拡大倍率や平行移動量の変更である。
まず、スクリプトは、スタンプ画像の拡大倍率を求める。ここで、スタンプ画像の横の拡大倍率(scaleX)、縦の拡大倍率(scaleY)はそれぞれ式(1)及び(2)から算出される。
scaleX=出力画像の横サイズ/描画領域1006の横サイズ ・・・(1)
scaleY=出力画像の縦サイズ/描画領域1006の縦サイズ ・・・(2)
これは、描画領域1006を拡大する際にはスタンプ画像も拡大しないと、ユーザに対する表示画像と印刷画像とで、スタンプ画像の相対的なサイズや描画位置が異なってしまうからである。ここで求めた拡大倍率によるスタンプ画像の拡大は、例えばCanvasであればContextオブジェクトのscaleメソッドを用いて行われる。
次に、拡大後のスタンプ画像の位置を求める。スタンプ画像の位置も先述のサイズと同様、印刷画像内でスタンプ画像の相対位置が、ユーザがディスプレイ106上で見る表示画像とずれないように、位置を変更する必要がある。再配置後のスタンプ画像の位置は、現在の位置に拡大倍率を乗算したものであり、再配置後のx座標(posX’)、y座標(posY’)はそれぞれ式(3)及び(4)から算出される。
posX’=poxX×scaleX ・・・(3)
posY’=posY×scaleY ・・・(4)
再配置後の位置へのコンテンツの平行移動は、例えばCanvasであればContextオブジェクトのtranslateメソッドを用いて行われる。
本実施形態では、S808で、上記のようなCanvas機能により拡大倍率と平行移動量とが算出され、表示用の描画情報からOS層203でのレンダリングに必要なレンダリング情報(レンダリング条件)が設定される。
S809において、スクリプト層201の画像処理部213は、S808で設定されたレンダリング条件とともに、スタンプ画像の描画をOS層203に依頼する。
S810において、OS層203は、S808で設定されたレンダリング条件に従って、スタンプ画像のレンダリングを行う。つまり、本実施形態では、スタンプ画像の平行移動やリサイズは、OS層203で実行される。
S811において、OS層203は、S804で確保された出力画像領域に対して、レンダリング後のスタンプ画像データを格納する。ここで、図8のS811の「出力画像領域に反映」とは、S807と同様、S804で確保された出力画像領域(メモリ)に変更を加えることであり、ディスプレイ106上に画像を表示することではない。
S812において、スクリプト層201の画像処理部213は、ネイティブ層202に対して印刷用の画像データの取得を依頼する。
S813において、OS層203は、出力画像領域の画像データを、BASE64のデータ形式に変換してスクリプト層201に送信する。
S814において、スクリプト層201のプリンタ制御部214は、ネイティブ層202に対してBASE64データを送信し、印刷を依頼する。
S815において、ネイティブ層202のプリンタデータ生成部215は、スクリプト層201から送信されたBASE64データをデコードする。S816において、ネイティブ層202のプリンタデータ生成部215は、デコードされたデータからRGBデータに変換し、S817において、OS層203に対してインジケータの停止を依頼する。S818において、OS層203は、インジケータを停止させてディスプレイへの表示を停止する。
[プリント]
S818の処理が終了すると、S306の処理が開始する。図9は、S306のプリント処理を示すフローチャートである。
S901において、ネイティブ層202のプリンタデータ生成部215は、S710で取得されたプリント情報に基づいて、S816で変換されたRGBデータをプリンタ115が処理可能なデータ形式に変換する。プリンタ115が処理可能なデータ形式には標準的なフォーマット(JPEG等)もあれば、各社独自のフォーマットの場合もある。ここではそれらのうち、どのようなデータ形式であっても良い。
S902において、ネイティブ層202のプリンタデータ生成部215は、プリント情報と、S901で生成されたRGBデータとに基づいて、プリンタ115へ送信するコマンドを生成する。
S903において、ネイティブ層202のプリンタデータ生成部215は、プリンタ115が対応可能な通信プロトコルに従って、S902で生成されたコマンドをOS層203のプリンタ通信部217を介して送信する。その際、S703で記憶されたIPアドレスを送信宛先とする。
S904において、プリンタ115において、印刷が開始されて印刷物が出力される。
以上のように、本実施形態によれば、印刷を行う際には、ディスプレイ106上の表示画像から印刷用のデータ(印刷解像度に従ったデータ)を生成するのではなく、表示に使われている元の画像データの情報から印刷用のデータが生成される。例えば、表示画像では、写真画像にスタンプ画像が合成されている場合には、OS層203は、写真画像データとスタンプ画像データそれぞれの情報から、両データが合成された印刷用のデータを生成する。つまり、描画領域1006から印刷画像への拡大処理等は、OS層203において写真画像データとスタンプ画像データについて別々に行われた上で合成される。その結果、表示用の画像データから印刷用の画像データを生成する際の解像度変換や拡大処理により、画像がぼやけてしまうことを低減し、画質劣化の少ないレンダリングが可能となる。
[第2の実施形態]
本実施形態では、追加したスタンプ画像をスクリプトで操作する方法について記述する。以下、第1の実施形態と異なる点について説明する。
[ユーザ操作フロー]
図12は、本実施形態における写真印刷処理の全体の手順を示すフローチャートである。本実施形態では、S1203のスタンプ画像追加の処理後に、S1204のスタンプ画像の特定と、S1205のスタンプ画像の操作が行わる点で、図3と異なる。図12のS1201〜S1203は図3のS301〜S303に対応し、図12のS1206〜S1208は図3のS304〜S306に対応する。
[スタンプ画像の特定]
S1203でスタンプ画像が追加された後、ユーザによるディスプレイ106上をタップ操作を検出することにより、S1204のスタンプ画像の特定処理が開始する。ここで、タップ操作とは、ユーザがディスプレイ106上を指で押すタッチ操作のことをいう。これは、PCで言うところの「クリック」に相当する。
図13は、スタンプ画像の特定の処理を示すフローチャートである。
S1301において、ネイティブ層202の画像処理部210は、OS層203のタッチイベント部216を介してタップされた座標を取得し、スクリプト層201に送信する。
S1302において、スクリプト層201のコンテンツ操作部212は、ネイティブ層202から送られてきた座標と、S609で生成されたオブジェクトパラメータの情報とから、スタンプ画像がタッチされたかを判定する。ここで、スタンプ画像のオブジェクトパラメータは初期値のままであるので、スタンプ画像は、左上の頂点座標を(10,10)、右下の頂点座標を(110,110)とする正方形の領域に描画されていることとなる。つまり、S1301で送られてきたx座標及びy座標が、その正方形の領域の範囲内であれば、スタンプ画像はタッチされたと判定する。例えば、S1301で送信されたx座標から、描画領域1006のx座標分を差し引いた値が0〜100の範囲、かつ、送信されたy座標から、描画領域1006のy座標分を差し引いた値が0〜100の範囲であれば、タッチされたと判定する。スタンプ画像が複数個ある場合には、より上層に表示されているスタンプ画像から順番に判定を行っていき、スタンプ画像の特定がなされた時点で判定処理を終了する。スタンプ画像がタッチされたと判定された場合、スタンプ画像は、スタンプ画像の操作を受け付ける状態となる。
S1303において、スクリプト層201のコンテンツ操作部212は、スタンプ画像を操作受付状態にする。ここで、操作受付状態とは、スタンプ画像の操作(スワイプ等)に関する指示がされた場合、スタンプ画像がその指示で動作可能な(スワイプ可能な)状態のことをいう。操作受付状態のスタンプ画像が存在しない場合には、スタンプ画像操作に関する指示がされても何も起こらない。また、操作受付状態とされたスタンプ画像のIDは、注目スタンプ画像IDとして、一時的にスクリプト層201で記憶しておく。そのことにより、スクリプト層201は、ネイティブ層202で記憶されているスタンプ画像を一意に特定することができる。
[スタンプ画像の操作]
S1302でスタンプ画像が操作受付状態になると、S1205のスタンプ画像の操作が開始する。図14は、S1205のスタンプ画像の操作処理を示すフローチャートである。
S1401において、スクリプト層201のコンテンツ操作部212は、スタンプ画像がスワイプされたか否かを、OS層203のタッチイベント部216からネイティブ層202を介して取得した情報に基づいて判定する。ここで、スワイプされたと判定された場合にはS1402へ進み、スワイプされていないと判定された場合にはS1404へ進む。スワイプとは、ユーザがディスプレイ106をタップしたのち、指を画面から離さない状態で移動させる操作のことである。これは、PCで言うところの「ドラッグ」に相当する。
S1402において、スクリプト層201のコンテンツ操作部212は、スタンプ画像のオブジェクトパラメータのposXとposYの値を、タッチイベント部216からネイティブ層202を介して取得したx座標、y座標に更新する。
S1403において、スクリプト層201の画像処理制御部213は、更新されたposX、posYの値に基づいて、描画領域1006内のスタンプ画像1009をDOM操作により座標位置(poxX、posY)へ移動させる。例えば、取得した情報からスタンプの座標位置を変更する場合には、以下のようなスクリプトを作成する。
update(x, y){ //座標位置を更新する
//x:描画領域の基準点(図10、1010)からのx座標
//y:描画領域の基準点からのy座標
var stamp = 操作受付状態のスタンプ(スタンプであるCanvasの実体)
var id = stamp.getAttribute(“id”); //スタンプのidを取得
var ObjectParam = ObjectParamArray[id];
//idから、操作受付状態のスタンプのオブジェクトパラメータを取得
ObjectParam.posX = x; //スタンプのObjectParamを更新
ObjectParam.posY = y;
}
reflection(stamp){ //更新した座標位置によってスタンプを操作
//stampは操作受付状態のスタンプ(Canvasの実体)
var id = stamp.getAttribute(“id”); //スタンプのidを取得
var ObjectParam = ObjectParamArray[id];
//idから、操作受付状態スタンプのオブジェクトパラメータを取得
stamp.style.position = “absolute”;
stamp.style.left = ObjectParam.posX + “px”; //スタンプをpoxXへ移動
stamp.style.top = ObjectParam.posY + “px”; //スタンプをpoxYへ移動
}
まず、update関数で、操作受付状態のスタンプ画像に関するObjectParamを特定し、位置に関する情報が更新される。上記では、ObjectParamArrayに、それぞれのスタンプ画像(Canvas)に対するObjectParamが配列として存在しており、スタンプ画像のIDを添え字とすることで、一意なObjectParamを特定している。スタンプ画像からObjectParamを特定する方法は他に、スタンプ画像に対応するCanvasとObjectParamとを両方含むオブジェクトを作成しておく方法や、ObjectParamにCanvasの実体を包含するなどの方法でも良い。
次に、reflection関数は、ObjectParamの情報を基にDOM操作を行い、表示されているスタンプ画像の位置を変更する。stamp.style.leftは、スタンプ画像の左上を原点としたときのx座標であり、JavaScriptによりこの値を操作することで、スタンプ画像(Canvas)の属性情報が変更され、表示されているスタンプ画像の位置が変更される。そのため、stamp.style.leftにObjectParam.posXを代入することで、update関数で更新されたx座標の情報をDOMに反映させることができる。ここで、stamp.style.leftのstampはスタンプ画像(Canvas)であり、styleは、JavaScriptでスタンプ画像のCSS情報を追加(変更)するということを示している。また、leftは、そのCSS情報に設定されるx座標である。CSSは、DOM要素のスタイルを変更できる言語であり、HTMLとCSSを組み合わせて利用することで、HTMLの表示を変更することが可能である。CSSは、Webページ作成などのHTMLを利用する場面では広く利用されており、先述の位置の変更だけではなく、他にも文字のサイズ・フォント、背景色の変更など様々な操作が可能である。前述の例では、JavaScirptによるCSSの変更を行っている。
同様に、stamp.style.topはスタンプ画像のy座標のことであり、ObjectParam.posYを代入することで、スタンプ画像のy座標が変更され、表示されているスタンプ画像の位置が変更される。
上記のスクリプト記述は、説明上、位置に関する記述のみであるが、コンテンツの大きさに関する情報など、reflection関数で操作できる内容は、上記に限定されるものではない。
スタンプ画像の操作後、S1401において、スクリプト層201のコンテンツ操作部212は、ユーザによる画面のタッチが維持されているか否かを、タッチイベント216からネイティブ層202を介して取得した情報に基づいて判定する。ここで、タッチが維持されていない(タッチが解除されている)と判定された場合には、図14の本処理を終了する。一方、タッチが維持されている場合には、S1401からの処理を繰り返す。
本実施形態では、スワイプによるCanvasの移動のみを説明したが、本実施形態はこれに限定されるものではない。例えば、ピンチアウトによるスタンプ画像の拡大、ロングタップ(長押し)とスワイプとを組み合わせてCanvas内で描画物を平行移動させるなど、タッチイベントとコンテンツ操作とが組み合わされた動作においても適用される。ここで、ピンチアウトとは、ユーザが二本の指で画面にタッチした後、二本の指の間隔を開ける操作である。一般的な携帯型情報端末では、画像・画面の拡大などに利用される。
また、先述の平行移動とは、描画領域1006内をCanavsが移動するのとは異なり、スタンプ画像1009のCanvas内で描画されているコンテンツが移動することを意味している。例えば、図10のスタンプ画像1009内のハートをwidth/2だけ平行移動したとすると、スタンプ画像1009の左半分の領域には何も表示されず、スタンプ画像1009の右半分には、ハートの左半分が映っているような状態になる。
本実施形態では、コンテンツの描画方法にレイヤ構造を用いた。また、レイヤ構造の中で描画される各コンテンツは、各々の描画元データや描画されている位置・サイズを保持している。これらの情報はスクリプトによる変更が可能であり、その情報を用いて表示系へ反映させることもできる。これを利用することで、1枚の表示画像として、独立したコンテンツ同士を適切な位置・サイズへ描画することが可能となる。また、印刷のためのレンダリングには、表示に使用される元の画像データを用いるため、画質劣化の少ないレンダリングが実現できる。
[その他の実施形態]
上記の各実施形態では、携帯型情報端末100上で、ハイブリッド型アプリケーションを動作させる構成について説明した。しかしながら、本実施形態はこれに限定されるものではない。例えば、ハイブリッド型アプリケーションが動作する環境は、スマートフォンやタブレットPCを始めとする携帯型情報端末100の他に、PCやサーバ、ゲーム機などであっても良い。
上記の各実施形態では、デバイス内の画像フォルダから画像が選択されているが、これに限定されるものではない。他に、画像データの絶対パスを指定する、画像データが格納されているフォルダを指定する、デバイスのカメラ機能により撮影された画像データを用いるなどの構成であっても良い。また、画像データの取得先についても、インターネット上の画像データを選択する、脱着可能な記憶媒体内の画像データを選択する、外部のデバイスとの通信により画像データを取得する、などであっても良い。外部のデバイスとしては、例えば、PC、携帯型情報端末、カメラである。
また、上記の各実施形態でのプリンタ115は、例えば、インクジェットプリンタ、レーザープリンタ、昇華型プリンタ、ドットインパクトプリンタである。また、プリンタ115は、スキャナ機能やFAX機能等を一体的に備えたいわゆる複合機(MFP)であっても良い。
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
100 携帯情報端末: 101 CPU: 102 ROM: 103 RAM

Claims (17)

  1. プロセッサと、
    アプリケーションの実行の際に前記プロセッサで実行可能なように翻訳され当該プロセッサにより実行されるスクリプト命令セットで構成された第1の層と、前記プロセッサで実行可能なように予め翻訳されている命令セットで構成された第2の層と、を有する階層構造を成し、前記第1の層と前記第2の層との連携により前記アプリケーションを実行するためのプログラムを記憶する記憶手段と、
    前記アプリケーションの機能により表示された画像を印刷する場合、前記第1の層において、当該画像のオブジェクトの描画位置及びサイズを含む描画情報から、当該オブジェクトをレンダリングするためのレンダリング情報を決定する決定手段と、
    前記第2の層において、前記決定手段により決定された前記レンダリング情報に従って、前記オブジェクトをレンダリングするレンダリング手段と、
    を備えることを特徴とする情報処理装置。
  2. 前記第1の層において、前記オブジェクトの描画情報を変更する変更手段をさらに備え、
    前記決定手段は、前記変更手段により変更された描画情報から、前記レンダリング情報を決定することを特徴とする請求項1に記載の情報処理装置。
  3. 前記画像のオブジェクトが複数のオブジェクトを含む場合、
    前記決定手段は、前記複数のオブジェクトそれぞれについて、前記レンダリング情報を決定することを特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記レンダリング手段は、前記複数のオブジェクトそれぞれについて、前記レンダリングを行うことを特徴とする請求項3に記載の情報処理装置。
  5. 前記レンダリング手段は、印刷解像度に基づいてビットマップデータを生成することを特徴とする請求項3又は4に記載の情報処理装置。
  6. 前記レンダリング手段は、さらに、前記複数のオブジェクトそれぞれについて生成されたビットマップデータを合成することを特徴とする請求項5に記載の情報処理装置。
  7. 前記第1の層は、HTML5、JavaScriptの少なくともいずれかにより記述されていることを特徴とする請求項1乃至6のいずれか1項に記載の情報処理装置。
  8. 前記画像のオブジェクトは、前記第1の層がJavaScriptで記述されている場合、Canvasを用いて描画されることを特徴とする請求項7に記載の情報処理装置。
  9. プロセッサと、
    アプリケーションの実行の際に前記プロセッサで実行可能なように翻訳され当該プロセッサにより実行されるスクリプト命令セットで構成された第1の層と、前記プロセッサで実行可能なように予め翻訳されている命令セットで構成された第2の層と、を有する階層構造を成し、前記第1の層と前記第2の層との連携により前記アプリケーションを実行するためのプログラムを記憶する記憶手段とを有する情報処理装置において実行される情報処理方法であって、
    前記アプリケーションの機能により表示された画像を印刷する場合、前記第1の層において、当該画像のオブジェクトの描画位置及びサイズを含む描画情報から、当該オブジェクトをレンダリングするためのレンダリング情報を決定する決定工程と、
    前記第2の層において、前記決定工程において決定された前記レンダリング情報に従って、前記オブジェクトをレンダリングするレンダリング工程と、
    を有することを特徴とする情報処理方法。
  10. アプリケーションの実行の際にプロセッサが実行可能なように翻訳され当該プロセッサにより実行されるスクリプト命令セットで構成された第1の層と、前記プロセッサで実行可能なように予め翻訳されている命令セットで構成された第2の層と、を有する階層構造を成し、前記第1の層と前記第2の層との連携により前記アプリケーションを実行するためのプログラムであって、
    前記アプリケーションの機能により表示された画像を印刷する場合、前記第1の層において、当該画像のオブジェクトの描画位置及びサイズを含む描画情報から、当該オブジェクトをレンダリングするためのレンダリング情報を決定し、
    前記第2の層において、当該決定された前記レンダリング情報に従って、前記オブジェクトをレンダリングする、
    ようにコンピュータを機能させるためのプログラム。
  11. 前記第1の層において、前記オブジェクトの描画情報を変更するようにコンピュータをさらに機能させ、
    当該変更された描画情報から、前記レンダリング情報を決定することを特徴とする請求項10に記載のプログラム。
  12. 前記画像のオブジェクトが複数のオブジェクトを含む場合、
    前記複数のオブジェクトそれぞれについて、前記レンダリング情報を決定することを特徴とする請求項10又は11に記載のプログラム。
  13. 前記複数のオブジェクトそれぞれについて、前記レンダリングが行われることを特徴とする請求項12に記載のプログラム。
  14. 前記レンダリングでは、印刷解像度に基づいてビットマップデータが生成されることを特徴とする請求項12又は13に記載のプログラム。
  15. 前記レンダリングでは、さらに、前記複数のオブジェクトそれぞれについて生成されたビットマップデータが合成されることを特徴とする請求項14に記載のプログラム。
  16. 前記第1の層は、HTML5、JavaScriptの少なくともいずれかにより記述されていることを特徴とする請求項10乃至15のいずれか1項に記載のプログラム。
  17. 前記画像のオブジェクトは、前記第1の層がJavaScriptで記述されている場合、Canvasを用いて描画されることを特徴とする請求項16に記載のプログラム。
JP2014135180A 2014-06-30 2014-06-30 情報処理装置、情報処理方法、およびプログラム Active JP6360370B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014135180A JP6360370B2 (ja) 2014-06-30 2014-06-30 情報処理装置、情報処理方法、およびプログラム
US14/739,196 US9575702B2 (en) 2014-06-30 2015-06-15 Information processing apparatus, information processing method, and storage medium storing program having a layered structure

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014135180A JP6360370B2 (ja) 2014-06-30 2014-06-30 情報処理装置、情報処理方法、およびプログラム

Publications (3)

Publication Number Publication Date
JP2016014921A true JP2016014921A (ja) 2016-01-28
JP2016014921A5 JP2016014921A5 (ja) 2017-08-17
JP6360370B2 JP6360370B2 (ja) 2018-07-18

Family

ID=54930903

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014135180A Active JP6360370B2 (ja) 2014-06-30 2014-06-30 情報処理装置、情報処理方法、およびプログラム

Country Status (2)

Country Link
US (1) US9575702B2 (ja)
JP (1) JP6360370B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6424745B2 (ja) * 2015-06-09 2018-11-21 株式会社リコー 画像形成装置、画像形成方法およびプログラム
JP6799396B2 (ja) * 2016-07-01 2020-12-16 キヤノン株式会社 情報処理装置、情報処理方法およびプログラム
US11048975B2 (en) * 2019-07-17 2021-06-29 Walmart Apollo, Llc Systems and methods for identifying items in a digital image
CN112954030A (zh) * 2021-01-30 2021-06-11 北京奇保信安科技有限公司 一种Web端图片压缩方法、装置及电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH117365A (ja) * 1997-04-24 1999-01-12 Canon Inc 画像保持装置、画像制御装置、出力制御装置、情報処理装置、及びそれらからなるシステム及び方法及びコンピュータ読み取り可能なプログラムが格納された記憶媒体
JP2007058783A (ja) * 2005-08-26 2007-03-08 Canon Inc 情報処理装置および情報処理方法
JP2007281595A (ja) * 2006-04-03 2007-10-25 Seiko Epson Corp 記録装置、記録制御プログラム
JP2010218457A (ja) * 2009-03-18 2010-09-30 Ricoh Co Ltd 画像形成装置、画像形成方法およびプログラム
JP2012168637A (ja) * 2011-02-10 2012-09-06 Seiko Epson Corp ネットワークシステムおよびネットワークシステムの印刷制御方法
US8595752B1 (en) * 2011-06-13 2013-11-26 Google Inc. Hybrid application message passing
WO2014027678A1 (en) * 2012-08-14 2014-02-20 Seiko Epson Corporation Epos printing
JP2014092996A (ja) * 2012-11-05 2014-05-19 Canon Inc 情報処理装置、その制御方法、及びプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3619143B2 (ja) 1999-11-18 2005-02-09 キヤノン株式会社 画像処理装置およびその方法
US8432404B2 (en) * 2008-12-15 2013-04-30 Leonovus Usa Inc. Media action script acceleration method
JP5761923B2 (ja) 2010-04-28 2015-08-12 キヤノン株式会社 印刷システム、情報処理装置及びその方法
JP5981789B2 (ja) 2012-07-09 2016-08-31 キヤノン株式会社 画像処理装置、画像処理方法およびプログラム
JP6012309B2 (ja) 2012-07-09 2016-10-25 キヤノン株式会社 情報処理装置、情報処理方法、およびプログラム
JP6071289B2 (ja) 2012-07-09 2017-02-01 キヤノン株式会社 画像処理装置、画像処理方法、およびプログラム

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH117365A (ja) * 1997-04-24 1999-01-12 Canon Inc 画像保持装置、画像制御装置、出力制御装置、情報処理装置、及びそれらからなるシステム及び方法及びコンピュータ読み取り可能なプログラムが格納された記憶媒体
JP2007058783A (ja) * 2005-08-26 2007-03-08 Canon Inc 情報処理装置および情報処理方法
JP2007281595A (ja) * 2006-04-03 2007-10-25 Seiko Epson Corp 記録装置、記録制御プログラム
JP2010218457A (ja) * 2009-03-18 2010-09-30 Ricoh Co Ltd 画像形成装置、画像形成方法およびプログラム
JP2012168637A (ja) * 2011-02-10 2012-09-06 Seiko Epson Corp ネットワークシステムおよびネットワークシステムの印刷制御方法
US8595752B1 (en) * 2011-06-13 2013-11-26 Google Inc. Hybrid application message passing
WO2014027678A1 (en) * 2012-08-14 2014-02-20 Seiko Epson Corporation Epos printing
JP2015531087A (ja) * 2012-08-14 2015-10-29 セイコーエプソン株式会社 Eposプリント
JP2014092996A (ja) * 2012-11-05 2014-05-19 Canon Inc 情報処理装置、その制御方法、及びプログラム

Also Published As

Publication number Publication date
US20150379380A1 (en) 2015-12-31
JP6360370B2 (ja) 2018-07-18
US9575702B2 (en) 2017-02-21

Similar Documents

Publication Publication Date Title
US10296267B2 (en) Information processing apparatus, information processing method, and storage medium
JP5901704B2 (ja) 情報処理装置、情報処理方法、プログラム
JP6363888B2 (ja) 情報処理装置、およびプログラム
US9471284B2 (en) Apparatus, method, and non-transitory computer-readable storage medium
US10620892B2 (en) Information processing apparatus that displays a print setting screen based on information of a printing apparatus in a format interpretable in a first program layer and processing method thereof
JP6478487B2 (ja) 情報処理装置、情報処理方法、及びプログラム
US10075620B2 (en) Information processing apparatus, control method for information processing apparatus, and non-transitory computer-readable storage medium
JP6381319B2 (ja) 情報処理装置、処理方法、及びプログラム
JP6138088B2 (ja) 情報処理装置、制御方法、及びソフトウェアプログラム
JP6360370B2 (ja) 情報処理装置、情報処理方法、およびプログラム
US10228890B2 (en) Apparatus, method, and non-transitory computer-readable storage medium
JP2017182488A (ja) 情報処理装置およびその制御方法、並びにプログラム
JP6757368B2 (ja) 情報処理装置、処理方法、及びプログラム

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170630

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170630

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180309

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180502

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180525

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180622

R151 Written notification of patent or utility model registration

Ref document number: 6360370

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151