お絵かき掲示板PHPスクリプトPOTI-boardを改良していくプロジェクトです。
PHP7.4-PHP8.4
English translated version is here. POTI-board EVO-EN
繁體中文版本 POTI-board EVO-zh-TW
-
v2.26.0以前のPOTI-boardにはXSSの脆弱性があります。
悪意のあるJavaScriptが実行される可能性があります。 -
v3.09.5以前のPOTI-boardのすべてのバージョンには重大な欠陥があります。
すべてのログファイルを失う可能性があります。
また、v3.x系統のPOTI-boardはPHP8.1環境で非推奨のエラーがでます。
現時点では警告ですがPHP9で動作が停止します。
そのためのv6.xの開発です。
v6.xの利用をよろしくお願いします。
v3.0で従来のPaintBBS NEO、しぃペインターに加え高機能なHTML5のペイントアプリChickenPaintの使えるようになりました。
スクリプトの名称はPOTI-board EVO(Evolution)になりました。
PHP8.1~PHP9に対応するためにテンプレートエンジンをBladeOneに変更し、potiboard.phpのコードの見直しを行いました。
v3.x系統の開発は終了し、v5.xになりました。
v3.xのテンプレートは使えなくなりました。
v5.xに対応したテンプレートをご利用ください。
v5.10.0で、新しいHTML5のペイントアプリklecksが使えるようになりました。
POI-board EVO v5.x で変わる事 · Discussion #15
設置はとても簡単です。
potiboard5ディレクトリをアップロードして、アップロードしたディレクトリのurlにブラウザでアクセスするだけで設置が完了します。
管理者パスワードの設定は必須です。
config.phpの最初の数行に必須設定項目がありますので、変更してください。
お絵かき掲示板簡単設置方法
お絵かき掲示板PHPスクリプトPOTI-board改公式サイトと、設置サポート掲示板 をオープンしました。ご利用ください。
設置サポート掲示板にはさとぴあが常駐しています。
- ログファイルの形式は同じです。どのバージョンのPOTI-boardのログファイルでも動作します。
potiboard.php
config.php
の再設定が必要です。新しいconfig.php
を使用して再設定する必要があります。
search.inc.php
save.inc.php
picpost.inc.php
thumbnail_gd.inc.php
lib/
chickenpaint/
klecks/
tegaki/
axnos/
BladeOne/
templates/
拡張子blade.php
のファイルがHTML部分です。CSSファイルもtemplates/
ディレクトリの中にあります。
parts/
ディレクトリにもいくつかのblade.php
形式のファイルが入っています。
laravel-blade - Visual Studio Marketplaceを使うとBladeの文法にそって色分けされて表示されます。
これによりBladeのHTMLファイルの編集が容易になります。
エディタも拡張機能も無償で利用できます。
この掲示板はテンプレートを入れ替える事ができます。
BASIC
とMONO
2種類のテンプレートを同梱しました。
MONOのHTMLとCSSをv3.07.5で大幅に更新しました。
そのためv3.07.5より古いCSSファイルを使用すると一部のデザインが正しく表示されなくなります。
たとえば、フッターやカタログの見た目が意図通りになりません。
その場合は、カスタマイズしたCSSファイルと同じ配色のCSSと同じになるように作り直す必要があります。
もし配色のみを変更したいのであれば、SCSSファイルもありますのでどうぞご利用ください。
SCSSファイルはmono/css/dev/sass/ディレクトリに入っています。
配色とその他のデザインに設定が分かれているため、配色を容易に変更できます。
Visual Studio Code – コード エディターと拡張機能DartJS Sass Compiler and Sass Watcher
があればコンパイルできます。エディタと拡張機能どちらも無償で利用できます。
potiboard_plugin: お絵かき掲示板 POTI-boardのための外部phpプログラム
パレットデータ(やこうさんパレット)、BBSNoteのログファイルをPOTI-board形式に変換するログコンバータなどがあります。
HTMLタグも旧独自タグも廃止してしまいましたが、urlの自動リンクは使えます。
また、マークダウン形式のテキストリンクも使えます。
[テキストリンク](https://example.com/)
と書くと
テキストリンクのようなテキストリンクを作成できます。
- Meta社のSNS「Threads」の共有リンクが作成できるようになりました。
変更するファイルの数は少ないのですが、「Threads」に対応させるには、config.php
の再設定が必要になります。
「Threads」対応の必要が無い場合は、config.php
の再設定は必要ありません。
// SNS共有の時に一覧で表示するサーバ
//例 ["表示名","https://example.com (SNSのサーバのurl)"],(最後にカンマが必要です)
$servers =
[
["X","https://x.com"],
["Bluesky","https://bsky.app"],
["Threads","https://www.threads.net"],
["pawoo.net","https://pawoo.net"],
["fedibird.com","https://fedibird.com"],
["misskey.io","https://misskey.io"],
["misskey.design","https://misskey.design"],
["nijimiss.moe","https://nijimiss.moe"],
["sushi.ski","https://sushi.ski"],
];
// SNS共有の時に開くWindowsの幅と高さ
//windowの幅 初期値 600
define("SNS_WINDOW_WIDTH","600");
//windowの高さ 初期値 600
define("SNS_WINDOW_HEIGHT","600");
["Threads","https://www.threads.net"],
が1行追加になり
さらに
define("SNS_WINDOW_WIDTH","600");
define("SNS_WINDOW_HEIGHT","600");
のように、初期値を600pxに変更しています。
ここのウィンドウサイズを変更しなくても表示できますが、画面下側が少し隠れ気味になります。
また、従来のウィンドウ幅でSNSの共有先の画面が表示されたあとの操作のための幅と高さが不足していたかもしれません。
そのため、幅、高さともに600pxに拡張しています。
- PaintBBS NEOで動画データが保存されない時は「レイヤー情報は保存されません。続行してよろしいですか?」という確認ダイヤログを表示します。
キャンセルすれば、レイヤー情報が保存されない事を前提にした作画を続行できます。
- マークダウン形式のリンク
[文字列](URL)
を改善しました。 文字列を指定する[]
の中にさらに[]
がある時は、バックスラッシュ(円マーク)でエスケープします。
エスケープされていれば [12345] Petit Note のようなリンクになります。 例)
[\[12345\] Petit Note](https://example.com)
マークダウン形式のリンクを作成するChromeの拡張機能のいくつかは、上記の例のように[]
の中の[]
をバックスラッシュでエスケープしますから、拡張機能が作成したマークダウンのリンクをそのまま使う事ができます。
- ユーザーコードを64文字に拡大しました。
- 画像差し換え時の認証コードのハッシュ値の種にパスワードを使用するのを止めました。
- 画像差し換え時の認証コードに、記事番号と記事IDをそのまま含める形にしより確実な認証ができるようにしました。
- 画像差し換え処理の時にも、投稿された画像の本人確認を追加して、ユーザーコードあるいはIPアドレスが一致する時にのみ画像を投稿するようにしました。
- 問題は続きを描いている最中に記事が削除されて、次の人が同じパスワードで記事を投稿した時に起こります。
次の人の投稿も同じ「記事番号」と「パスワード」になるからです。
この時、次の人の投稿を「続きを描く」で続きを描いた投稿が上書きしてしまいます。
記事の編集中に記事が削除され、同じ「記事番号」と同じ「パスワード」の別の投稿が記事の編集中に投稿された時にも同様の問題が発生します。 - この問題を回避するため、続きを描く・記事編集の時に、上書きする記事がもとの記事と同一かどうかを記事のUNIXタイムスタンプで確認します。
Feature request/proposal: converting brightness to opacity · Issue #4 · satopian/ChickenPaint_Be
- 「輝度を透明度」に変換機能を追加しました。
- @SuzuSuzu-HaruHaruさんが作成した原型をもとに不透明度の計算方法を調整し、一般的なペイントソフトと比較しても遜色のない機能として実装しました。
テンプレートを更新しなくてもこれまで通り動作します。
ただし、更新しない場合は、記事の編集中に記事が削除されてしまっていた時に、次の投稿を上書きする可能性は残ります。
この問題は20年前からPOTI-boardに存在していた問題ですから、問題が発生するケースはおそらくごく稀です。
ログファイルが5MBを超過した時に、ログファイルとして必要なの項目を考慮しない形でログファイルがカットされてしまっていました。
そのため、ログファイル取得時の5MB制限を廃止しました。
代わりに、ログファイルのサイズチェックを追加します。
ログファイルが15MBを超過している時は、エラーメッセージを表示します。(書き込み時とペイントボタン押下時)
しかしながら、ログファイルのファイルサイズが15MBになる頃には、掲示板がかなり重くなっているはずです。
およそ、8000件の投稿までなら稼働実績がありますが、それ以上になると動作が不安定になる可能性が高いです。
もっと多くの書き込みを保存したい時は、
satopian/Petit_Note: 「お絵かき掲示板PHPスクリプトPetit Note」 for PaintBBS NEO, tegaki.js,AXNOS Paint,ChickenPaint and Klecks. (PHP7.0 - PHP8.4)
https://github.com/satopian/Petit_Note
の利用をご検討ください。
こちらは、1スレッド1ログファイル形式のため、8000スレッド保存可能です。
1スレッドに200発言なら8000x200=160万件投稿稿可能です。
ログファイルのサイズチェックの制限値を一律で15MBにしても良かったのですが、一応設定できるようにしておきました。
特にこだわりがない場合は、設定項目を追加する必要はありません。
設定項目が存在しない場合は、デフォルトの制限値15MBが適用されます。
//ログファイルのファイルサイズの制限値(単位MB)
//大きな値を設定すると動作が不安定になる可能性があります。
define("MAX_LOG_FILESIZE", "15");
PHP8.4のRFCで削除が検討されたものの、反対票がわずかに多かったため非推奨にならなかった関数のいくつかをPOTI-board EVOで使用していました。
PHP: rfc:deprecations_php_8_4
https://wiki.php.net/rfc/deprecations_php_8_4
Deprecate uniqid() Deprecate md5(), sha1(), md5_file(), and sha1_file()
PHP8.4では非推奨にならなかったものの、今後の事を考えて別の関数への置き換える事にしました。
Deprecate uniqid()
uniqid()
の使用をやめ、代わりにrandom_bytes()
を使用します。
Deprecate md5()
PHP8.4のRFCでmd5()
の廃止も検討されていました。
そのため、同じ画像が連続投稿されるのを防止するために使用していたmd5
による画像のハッシュ値の取得をsha256
に変更しました。
- これまでログファイルに記録されていたハッシュ値は
md5
で取得したものであるため、過去の画像のハッシュ値は意味をなさなくなってしまいます。 - そのため、v6.50.3への更新のあと新規に投稿された画像のみが重複チェックの対象になります。
- config.phpの
$badfile
も新しく作り直す必要があります。
//拒絶する画像のハッシュ値
$badfile = array("dummyhash","dummyhash2");
(拒絶画像の指定をしているユーザーはほとんどいないと思いますが。)
- Apache2.2は2017で公式サポートが終了しましたが、そのApache2.2形式のhtaccessを使用していた事が判明したため、Apache2.4形式に書き直しました。
- ファイルサイズがサーバの許容値を超えている時により詳細なエラーメッセージを表示します。
「ファイルサイズがサーバーの上限を超えています。」というエラーメッセージを表示します。
また、上限値と現在のファイルサイズも表示します。
これまでは「お絵かきが保存できませんでした。再度投稿してみてください。」とだけ表示されていました。 ChickenPaintのレイヤーを統合して整理すれば投稿時のファイルサイズは小さくなります。このエラーメッセージが表示されて投稿できない時はレイヤーの統合を行えば投稿が可能になる場合があります。
アップロード容量の制限値を知りたい(ファイルマネージャ、FTP、PHP) - よくあるご質問 - さくらのサポート情報 https://faq.sakura.ad.jp/s/article/000001463
さくらのレンタルサーバでは、初期設定で5MBまでとなっており、それよりも大きなファイルサイズを許容してたい時は、php.iniを編集します。
POTI-boardでは、post_max_sizeとupload_max_filesizeの両方の値をみて、より小さなほうを制限値として使いますので、以下の2つの上限値を調整する必要があります。
php.iniの編集方法はサーバのマニュアルなどでご確認ください。
以下の設定例の単位はMBです。
あまり大きくしすぎるとDdos攻撃の被害にあいやすくなる事がありますので、ご注意ください。
JavaScriptのアプリの安定性なども含めて考慮すると大きくても25MBぐらいが妥当だと思います。
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; https://php.net/post-max-size
post_max_size = 20M
; Maximum allowed size for uploaded files.
; https://php.net/upload-max-filesize
upload_max_filesize = 20M
//アップロード時の幅と高さの最大サイズ これ以上は縮小
define("MAX_W_PX", "1024"); //幅
define("MAX_H_PX", "1024"); //高さ
お絵かきできる最大サイズよりも、MAX_W_PX
またはMAX_H_PX
で設定したサイズのほうが小さな時に、画像が縮小されてしまうバグを修正しました。
本来は、お絵かき画像の画像サイズの制限は、お絵かきできる最大サイズで指定するべきで、投稿したあとに、最初の画像よりも小さくなるのは意図していなかった動作でした。
- BASICテンプレートにもトリップコードを表示できるようにしました。(MONOには以前から実装ずみ)
この画像の「◆CSZ6G0yP9Q」の部分がトリップコードです。
名前を入力するときに「さとぴあ#abcd」のように入力すると「abcd」の部分がトリップコードに変換されます。
「◆CSZ6G0yP9Q」という文字しかわからない場合は、もとの入力が何であったのかを推測する事が難しいため、匿名掲示板で本人である事の証明する時に使われているものです。
たとえば、掲示板の管理者と名乗る書き込みが本当に管理者によるものなのかどうかをトリップコードで確認する事ができます。
古いPOTI-boardにもともとあった機能を使う人がいないという理由で取り外していましたが、一定の需要が存在している事が判明したため、再度実装しました。
- MONOは入力欄が上部にあるため、投稿完了時に返信画面の一番上の位置を表示していました。
しかしながら、それでは返信コメントの投稿が完了したのかどうかわからない時があるため、返信したコメントが見える位置まで画面をスクロールするようにしました。
- PNG形式画像がMAX_KBを超える時は、JPEGに変換して投稿を可能にする機能を改修し、potiboard.phpで処理していたGDの処理をthumbnail_gd.phpに移動しました。
既存のGD処理を活用して、potiboard.phpのコードを短縮しました。 - お絵かきの時には画像のファイルサイズがMAX_KBで指定した値を超えていても、エラーにせず投稿を完了させるようにしました。
投稿フォームからの添付ファイルの画像は、これまで通り、MAX_KB超過時にエラーになります。
これまでも存在していてた仕様ですが、もとのファイルサイズがとても大きくても、縦横の制限で縮小が入り、MAX_KBよりファイルサイズが大きな時はPNGをJPEGに変換します。
その結果、最終的なファイルサイズがMAX_KBの範囲内に収まれば投稿は成功します。
- 「テクスチャパレット」に「ノイズテクスチャ」を追加しました。
これまでも、「効果メニュー」の「単色ノイズ」とレイヤー効果でノイズをのせる事ができましたが、それとも少し違うノイズを出す事ができます。
ペンや鉛筆と組み合わせて使う事で、より鉛筆らしい線を描写できます。
また水彩ブラシなどの厚塗りの時にも効果を発揮します。
- 消しゴム使用時はテクスチャを無効化する処理を追加しました。
テクスチャを選択している時にも、消しゴムで消去できるようになりました。
これまでは、テクスチャを選択したまま消しゴムをかけると、薄くはなるものの、消す事ができませんでした。 - 薄消しゴム使用時はテクスチャが適用されます。消しゴムを使ったテクスチャのかけ合わせによる模様の作成をする時は薄消しゴムをご利用ください。
- ChickenPaint Be拡大縮小のショートカットキーをKlecksやAXNOS Paintと同じ、「+」「-」に変更しました。
これまでは、「ctrl + +」「ctrl + -」のように「ctrlキー」と一緒に押下する必要がありました。 - ChickenPaint Beのファイルサイズを23.7%削減。
ビルドツールの変更とIE互換のために使用していたポリフィルのパッケージの削除により、ファイルサイズを779KBから594KBに削減する事ができました。
軽量化により、より高速に起動できるようになりました。
別ページに移動してしまった時や、ブラウザのタブを誤って閉じた時に画像を復元する機能が、PaintBBS NEOにはありますが、復元時にあやまって小さなキャンバスサイズを選択して復元すると、その小さなキャンバスサイズにあわせて画像が切り取られていました。
その後に大きなキャンバスサイズを選択して再度復元しても、画像は小さく切り取られたままでした。
今回の更新により、再度大きなキャンバスサイズを選択すればもとのサイズで画像を復元できるようになりました。
別ページに移動してしまった時や、ブラウザのタブを誤って閉じた時に画像を復元する機能が、PaintBBS NEOにはありますが、落雷による停電等でPCの電源が落ちてしまった時は、画像を復元する事ができませんでした。
ページを移動した時やタブを閉じた時にしかバックアップ用のデータを保存していなかったため、落雷等による予期しない電源の遮断時に復元データは保存されていませんでした。
そのため、復元用のデータを10ストロークごとに保存し、ブラウザを完全に終了した時にもデータを保存するようにしました。
そして、データの保存先がモバイル端末の時と同じようにローカルストレージになるように変更しました。
しかし、これだけでは問題が残ります。
試し書き等のデータが1週間後あるいはもっと先まで保存され続け、予期しないタイミングで復元される可能性があります。
それらを考え、3日以上経過した古い復元データは自動的に破棄する仕様にしました。
近年の気候変動により、雷雨による停電が増えています。
今回のPaintBBS NEO v1.6.5により、突然停電になった時でも、描画途中のデータを復元できるようになりました。
PC版のChrome、EdgeそしてFirefoxで動作確認しています。
- Klecksで続きを描く時にPNG、JPEGなどの画像ファイルの読み込みに失敗する事があるのを修正しました。
- Klecksで透過PNGから続きを描いた時に透過にならず白塗りつぶし背景になるバグを修正しました。
レイヤー情報を記録しているPSDファイルが存在している時にはこの問題は発生しないため発見が遅れました。 - 画像を保存するためのファイルが存在しない時の404エラーのエラーメッセージを修正しました。
エラーメッセージにインクルードして使っている直接呼び出していないファイル名が表示されていました。
AXNOS Paintとは (アクノスペイントとは) [単語記事] - ニコニコ大百科
//Axnos Paintを使う 使う:1 使わない:0
define("USE_AXNOS", "1");
この設定項目が存在しない時は、Axnos Paintを使うになります。
Axnos Paintをペイントアプリ選択一覧に出したくない時は、上記設定項目を追加してください。
- コードを整理しました。機能に変更はありません。
- Klecksを最新版にアップデートしました。細かな修正が行われています。
/*セキュリティ*/
// 管理者パスワードを5回連続して間違えた時は拒絶する
// する: 1 しない: 0
// する: 1 にするとセキュリティは高まりますが、ログインページがロックされた時の解除に手間がかかります。
define("CHECK_PASSWORD_INPUT_ERROR_COUNT", "0");
//ftp等でアクセスして、
// `templates/errorlog/error.log`
// を削除すると、再度ログインできるようになります。
// このファイルには、間違った管理者パスワードを入力したクライアントのIPアドレスが保存されています。
// 上記ファイルは手動で削除しなくても、ロック発生から3日経過すると自動的に削除され、ロックが解除されます。
// また、 しない: 0 に設定しなおせば上記ファイルは削除され、ロックが解除されます。
管理者パスワードを5回連続して間違えた時は拒絶する設定を有効にして、拒絶されてしまった時の対処方法はこれまで、ftp接続して、templates/errorlog/error.log
を削除するしかありませんでした。
それでは面倒なので、3日後には自動的にロックが解除されるようにしました。
また、拒絶しないに設定しなおすと、上記エラーログが削除されるようにしました。
その後すぐに拒絶するに設定を戻してもロック解除ずみなので、次の5回連続誤入力までロックされません。
- レイヤーパレットに複製アイコンを追加しました。
レイヤーやレイヤーグループを1タップで複製できるようになりました。
これまではショートカットキーを使用するか、上段のメニューから複製を選択する必要がありました。 - 下のレイヤーと結合アイコンをより視覚的にわかりやすいものに変更しました。
- レイヤーグループ結合アイコンを下のレイヤーと結合アイコンと同じ位置に配置しました。
レイヤーグループのフォルダ選択時はグループ結合アイコンになり、レイヤーの選択時には下のレイヤーと結合アイコンに入れ替わります。
- 背景レイヤーと透明なレイヤー合計2枚で起動します。
白い背景レイヤーに線画を描く事故を減らせます。
- iPad Air相当の幅または.高さが820px以下でタッチデバイスの時にモバイルモードで起動するようになりました。
これまでは、幅または高さが800px以下という条件だったため、iPad Airの時はPC用UIで起動していました。
またPCでブラウザのウィンドウサイズを小さくした時にもモバイル用の画面に切り替わっていましたが、タッチデバイス判定処理を追加した事によりPCの時はPC用のUIが起動するようになりました。
拡張子.json
の呼び出しを禁止する設定にしていましたが、PWAやスマホのホーム画面に設定するためのアイコンを設定するmanifest.json
の呼び出しも禁止になってしまいタッチアイコンが設定できなくなっていたため、ファイル名がmanifest.json
の場合は呼び出し可能になるように設定を変更しました。
この更新はmanifest.json
の設置が必要ない場合は関係ないため、その場合は更新する必要はありません。
テンプレートMONOを更新しました。
フォーム入力欄の説明文を英語から日本語に変更しました。
スマホ時のフォームの表示方法を変更しました。
- 768px以下の幅と高さのデバイスの時はスマホ用のUIに切り替えてパレットを折りたたみます。UIが使用する面積が少なくなるため、より大きなキャンバスに描画する事ができるようになります。
iPad.mini.mp4
- スマホ用UIの時のカラーセットのマージンを広げ、指でタップできるようにしました。
- スマホ時にもあえてブランドロゴを表示して、ブラウザのホームボタンの誤タップが発生しないようにしました。
- パレット表示非表示のショートカットメニューがデバイスの幅いっぱいに広がるようにしました。 これまでは、間隔が狭すぎて意図した箇所の黄色いショートカットメニューをタップできない事がありました。
- スマホ時のChickenPaintのメニュー操作で、ぼかしやグリッド設定などの数値入力を行ったあとキャンバスサイズが全画面にもどらなくなる問題を、v6.31.10で修正しましたが、パレット位置がモーダル表示前と表示後でずれる問題が残っていました。
モーダルウィンドウの表示イベントを取得して、自動的にハンバガーメニューを閉じるようにして、この問題を修正しました。 - スマホ・タブレットを縦または横に変更したときにハレットの配置を自動的に初期化します。 v6.31.10で、ウィンドウのサイズが変更になった時にパレットの配置の初期化する処理を追加しましたが、レイヤー名のリネーム時のスクリーンキーボードの出現をウィンドウのサイズ変更として検出してしまい、レイヤー名を変更できなくなっていたため、スマホ・タブレットの向きが変更された時にパレットの配置の初期化するようにしました。
- ブラシを変更しながら描きたい時に毎回折りたたまれてしまうとタップする回数が増えてしまいます。
スマホ時は全パレットの非表示もショートカットメニューをタップすれば可能なため、ツールパレットの自動折りたたみ機能を廃止しました。 - 大画面スマホの時にもパレット折りたたみ式のスマホ表示になりました。
"orientationchange"
が非推奨になっていたため、screen.orientation
オブジェクトの変更を取得するようにしました。- スマホ用のパレット表示/非表示のショートカットメニューがGoogle Pixel 7や、iPhone14 で表示されない事が判明したため、- スマホ用のパレット表示/非表示のショートカットメニューがGoogle Pixel 7や、iPhone14 で表示されない事が判明したため、デバイスのCSSピクセルが幅800px高さ768px以下の時にはスマホ用のショートカットメニューを表示するようにしました。
- スマホ時のChickenPaintのメニュー操作で、ぼかしやグリッド設定などの数値入力を行ったあとキャンバスサイズが全画面にもどらなくなる問題を修正しました。
スマホを縦横に傾けた時に、レイヤーパレットの位置が期待した位置に表示されない事がある問題に対応するため、画面のリサイズ時にパレット配置の初期化を自動的に行うようにしました。
PCでブラウザのウィンドウサイズを変更した時にもサイズが変わるたびにパレットの配置が初期化されます。
これにより、ウィンドウの幅を狭くした時にパレットが左に偏ってしまいウィンドウを広げ直しても元に戻らなくなっていた問題も解決しました。
ただし、ウィンドウを少し変更するだけでパレットの配置が初期化されてしまうため、パレットの位置を動かしながら描きたい場合には問題が発生するかもしれません。 しかしながら、ウィンドウのサイズを変更しなければ初期化はされませんので、一定のブラウザのウィンドウサイズで描く分には問題ないはずです。
- ChickenPaintの操作パレットに左右反転アイコンを追加しました。
キーボードショートカットキーを使うことができない端末でも簡単に左右反転できるようになりました。
ただし、レイヤー単位の左右反転になり、表示の左右反転ではなく実データの左右反転になります。
そのためこの左右反転は履歴にも残ります。
設定がtwitter.com
でもx.com
、でもx.com
のURLでSNS共有リンクが作成されるようになりました。
// SNS共有の時に一覧で表示するサーバ
//例 ["表示名","https://example.com (SNSのサーバのurl)"],(最後にカンマが必要です)
$servers =
[
["X","https://x.com"],
["Bluesky","https://bsky.app"],
["pawoo.net","https://pawoo.net"],
["fedibird.com","https://fedibird.com"],
["misskey.io","https://misskey.io"],
["misskey.design","https://misskey.design"],
["nijimiss.moe","https://nijimiss.moe"],
["sushi.ski","https://sushi.ski"],
];
config.php
のX(旧ツイッター)のURLがtwitter.com
のままでも問題なくx.com
のリンクが作成できるようにしました。
一覧で開くSNSの名称が「Twitter」のままでも構わなければ、config.phpを修正する必要はありません。
ただし、config.php
の設定が優先されてしまうため、旧ツイッターを「X」と表示させたい場合は、上記の該当箇所を["X","https://x.com"],
に変更する必要があります。
- Blueskyが、共有一覧に無い時にも、直接入力で
https://bsky.app
と入力すればBlueskyに共有できるようになりました。 - スマホ等で、X、Bluesky、Misskey等に共有するときにアプリ版が起動し、共有サーバの選択画面がChrome側に残ってしまう問題を修正しました。
SNSの共有サーバ一覧画面からフォーカスが外れた時に、画面を閉じるようにしてこの問題を解決しました。
ただし、一覧画面からすでに、SNSのサイトに画面が移動している時はフォーカスが外れても閉じません。 その場合は、すでに入力中か、あるいはSNSの投稿を閲覧中だからです。 PCで使用している時にも発生していた、SNS共有ウィンドウがいくつも開いて残ってしまう問題も解決しました。
Twitter、マストドン、Misskeyに加え、Blueskyへの記事の共有もできるようになりました。
ただし、これを有効にするには、config.php
の設定が必要になる場合があります。
// SNS共有の時に一覧で表示するサーバ
//例 ["表示名","https://example.com (SNSのサーバのurl)"],(最後にカンマが必要です)
$servers =
[
["Twitter","https://twitter.com"],
["Bluesky","https://bsky.app"],
["pawoo.net","https://pawoo.net"],
["fedibird.com","https://fedibird.com"],
["misskey.io","https://misskey.io"],
["misskey.design","https://misskey.design"],
["nijimiss.moe","https://nijimiss.moe"],
["sushi.ski","https://sushi.ski"],
];
config.php
のSNS共有サーバの設定項目がすでに存在している時にはその設定が優先されるため、config.php
に
["Bluesky","https://bsky.app"],
を追加する必要があります。
Blueskyへの記事の共有が必要ない場合は特に何もしなくてもそのほかの機能は正常に動作します。
もしも、共有するサーバ一覧が増える事で、ポップアップルメニューに入り切らなくなってしまった場合は、
//windowの高さ 初期値 490
define("SNS_WINDOW_HEIGHT","490");
を490より大きな数値に変更してみてください。
今回更新したconfig.php
は、
https://mstdn.jp/
を外し、代わりにBlueskyを追加して共有するサーバの数を増やさない形で対応しています。
ここには、マストドンやMisskeyであれば何件でもユーザーがサーバを追加できますので、必要に応じて追加や削除をお願いします。
なおこのリリース執筆時点では、Bluesky共有の際に二回分キー操作を行わないと記事の埋め込み画面が表示されない事を確認しています。
現時点ではBlueskyの仕様であるためどうする事もできません。
エンターキーを二回でもスペースキーを二回でも構いませんので、キー操作を行えば表示されます。
自動リンクの正規表現を修正しました。URLとして判定する文字に:
を追加しました。
これによりInternet ArchiveのURLの自動リンクが可能になります。
この仕様は過去の投稿にさかのぼって適用されます。
https://example.com/https://www.example.com
ChickenPaintのレイヤーをリネームして、iPadのスクリーンキーボードが画面から消えた時にChickenPaintのメニューバーが隠れてしまう問題に対応しました。
スクリーンキーボードが表示されると画面が強制スクロールされますが、キーボードが消えたあとが元の位置にもどらなくなっていたのを修正しました。
CSSの新しい単位dvhを使用して、高さを100vhから、100dvhに変更しました。
Javaアプレットから送信されるIPアドレスはIPv4で、PHPスクリプトではIPv6のIPアドレスが送信され、結果として同じ人が投稿した画像と判断されないケースがありました。
IPアドレス不一致により、お絵かき画像を投稿しても、お絵かきコメントの画像一覧に画像が出てこない事があったのを修正しました。
IPアドレス不一致でも、Cookieが一致すればお絵かきコメントの画像一覧に画像が出てくるのでこの問題に直面するケースは稀でした。
従来の右クリックに加え、ペン、指による長押しでも、パレットに色を登録できるようにしました。
ただし、パレットを長く押してしまうと長押しになり、色の選択ではなく色の登録になってしまいます。
色を拾うだけの時は長押しにならないようご注意ください。
ショートカットキーを追加しました。「ctrl+i」でネガポジ反転できるようになりました。
レイヤーマスクのネガポジ反転も可能です。マスクをネガポジ反転して、可視領域を反転する事もできます
iPad iOSのSafari、Chromeで、ChickenPaint Beのセレクトメニューが動作しなくなっていたのを修正しました。
これは、ChickenPaint Be固有の問題で、ChickenPaintの開発元のバージョンの問題ではありません。
//[新規投稿は管理者のみ]にする する:1 しない:0 //する(1)にした場合、管理者パス以外での新規投稿はできません define("DIARY", "1");
ここで、新規投稿には管理パスが必要と設定しているにも関わらず、管理パス以外で投稿できてしまうバグを修正しました。
このバグはv3.xから存在していました。
メールで通知される記事のURLも新しく設定された記事内のIDの形式"?res={$resno}#{$no}"に統一されました。
すでにSESSIONが開始されている時にpicpost.inc.php
で、session_start()
が呼び出され、軽微なエラーが発生していたのを修正しました。
ChickenPaintと、PaintBBS NEOのイベントリスナーの処理に、明示的にpassive:false
を指定して、Chromeの警告が表示されないようにしました。
HTML5版のGETによるパスワード受け渡しをv6.26.10で廃止して、POSTに移行しました。
HTML5版は、JavaScriptなので、JavaScriptを改良・改造する事で対応できましたが、Javaアプレットのしぃペインターそのものの内部処理を変更する事はできないため、しぃペインターでは引き続きGETによる処理が必要という結論を一度は出しました。
しかし、しぃペインターの通信がセキュアではないのはやはり問題であるため、画像投稿処理のあと差し換え処理まで一気に行う方式を採用してこの問題を解決しました。
これにより、すべてのペイントアプリの機密データの受け渡しはPOSTで行われるようになり、URLに機密データを含めるGETによる処理は完全に廃止されました。
これまでとは比較にならないぐらい安全な通信に移行する事ができました。
また、Waterfox Classic等のJavaプラグインが使用できるブラウザでの実行テストを強化して、エラー発生時に画面が移動しないようにしました。
残念ながら従来のしぃペインターの仕様、error\n
で始まるエラーメッセージをJavaプラグイン使用時には解読できなくなっているため、Javaプラグイン使用時には「投稿に失敗。時間を置いて再度投稿してみてください。」という定型文のアラートのみが開きます。CheerpJ+Chromeでしぃペインターを起動している時には、本来の仕様通りの詳細なエラーメッセージのアラートが開きます。
Javaの「しぃペインター」と「PaintBBS」以外のHTML5版のアプリの機密データの受け渡しをGETからPOSTに変更する事に成功しました。
ChickenPaintとNEOに掲示板で用意したJavaScriptの関数の割り込み処理を追加しました。
こうすることによって、いくつあるかわからないいろいろな種類のお絵かき掲示板がそれぞれ必要な処理を独自に追加できるようになります。
これまでも、PHPのOpenSSL 関数を使ってパスワードを暗号化し、GET渡しといってもリダイレクトするので、履歴にも残らないため一定の安全性は確保できてはいたのですが、GETである以上、URLが第三者にわかればセットされているデータがわかってしまうという問題がありました。
今回の更新で、長い間、GETでしかデータの受け渡しができなかった画像差し換え時のパスワードをfetch APIを使ったPOSTに移行する事ができました。
KlecksとTegakiは通信部分を掲示板で作成しているため、GETで渡していた箇所をfetchに書き直しました。
残念ながら「しぃペインター」は依然としてJavaScriptで中身をいじる事ができないため、今後もGETによるデータの受け渡しになります。
「PaintBBS NEO」の事を「しぃペインター」と呼ぶ慣習がありますが、アプリとしての「しぃペインター」はJavaのアプリで、「PaintBBS NEO」はHTML5版として作成された「PaintBBS」のJavaScript版です。
「しぃペインター」には依然として従来と同じ問題がある→「PaintBBS NEO」に問題があるという事ではありません。
//続きを描く時は設定に関わらずすべてのアプリが使用できるようにする する:1 しない:0
define('ALLOW_ALL_APPS_TO_CONTINUE_DRAWING', '0');
続きを描く機能を使う使わないという設定項目があったり、お絵かき機能を使う使わないという設定項目があったり、管理者はすべてのアプリを利用可能にする設定項目等があり、設定項目自体がスパゲッティ化しているのが現状なのですが、さらに設定を追加しました。
設定項目が存在しない場合は従来と同じ動作になります。
しない:0が従来と同じ動作になります。
//描画時間の表示 する:1 しない:0
define("DSP_PAINTTIME", "0");
描画時間を表示しない設定の時に「続きを描く」画面を表示した時に未定義エラーが発生していたのを修正しました。
Waterfox Classic+Javaプラグインの時にしぃペインターの投稿が失敗するバグを修正しました。
変数に格納されたテキストが HTML として解釈されるXSSの脆弱性を修正しました。
現時点で配布されている最新版のlightboxに存在する問題を独自に修正しました。
この間報告のあった投稿時のエラーの原因が拡張ヘッダと無関係だった事が判明したため、GETによる受け渡しをやめて以前と同じように拡張ヘッダ経由のPOSTを使うようにしました。
NEOが起動している画面ではNEOのキーボードショートカットキーとテキスト入力以外のキー操作ができませんでした。
そのため、動的パレットの「textarea」へのパレットデータの貼り付けのためにマウスの右クリックメニューを使用する事しかできない状態でした。
また貼り付けたパレットデータの編集もできませんでした。
2024年に動的パレットのデータの取得や貼り付けを使っている人はそれほど多くいないとは思いますが、これが使えると自分専用のパレットをどこの掲示板でも使えるようになります。
今回の更新で、パレットデータの入力欄のキー入力が可能になりました。
オリジナルのPaintBBSのようにctrl+v(貼り付け)crtl+x(切り取り)ctrl+c(コピー)crtl+a(すべて選択)等がパレットデータ入力欄で使用できるようになりました。
また、NEOの文字入力機能使用時に全キー入力が許可されてしまい、ctrl+r(リロード)crtl+h(履歴)ctrl++(拡大)ctrl+-(縮小)のブラウザデフォルトのショートカットキーが作動してしまう問題も修正しました。
TegakiのデータがPOST可能な限界サイズを超えてしまう時は、アニメデータを切り捨てて画像だけ投稿するようにしました。 (前回のNEOの更新のTegaki版)
Paint画面でライトボックス関連のJavaScriptが未定義エラーになっていたのを修正しました。
おそらく実際の動作には影響のないエラーだと思いますが、未定義の場合は処理を行わないようにしました。
neoの描画アニメのファイルサイズが大きくなりすぎてサーバで処理でなくなり、画像を含むすべての投稿が失敗する問題を修正しました。
サーバの投稿可能なファイルサイズの限界値をPHPスクリプトで取得して、それをneoに渡して計算し、限界を超える時には描画アニメファイルを切り捨てて、画像の投稿が成功するようにしました。
動画を切り捨てないと投稿そのものが失敗するため、動画はなくなりますが仕方ありません。
動画の投稿が成功する前提で一番上のレイヤーを塗り潰して下の絵を隠して続きを描く習慣がお絵かき掲示板にはありますが、その場合は動画が切り捨てられた時点で塗りつぶした一番上のレイヤーの画像しか残りませんのでご注意ください。
さくらのレンタルサーバのデフォルト設定では8MBがPOSTの上限で、それを超える場合は動画が切り捨てられます。
画像のみの投稿になりますが、投稿は成功します。
動画(レイヤー情報)がファイルサイズ超過で送信されない時は、「画像のみが送信されます。レイヤー情報は保持されません。」というダイヤログが開いて「OK」をタップした時のみ送信が実行され、「キャンセル」した時は送信されません。
画像のみの送信では困る状態の時は「キャンセル」してレイヤー情報が保持されない事を前提にした作画を続行する事ができます。
POSTの上限が8MBでは足りない場合は、php.ini
の設定で以下のように記述します。
upload_max_filesize = 22M
post_max_size = 22M
上記は、1つのファイルの最大ファイルサイズが22MBで、POSTの合計サイズが22MBまで投稿可能になるようにした設定例です。 必要に応じて増減してご利用ください。 (レンタルサーバの設定のサポートは掲示板開発者のサポート範囲外ですので、サーバ会社のQ&A等で調べていただく形になります)
描画アニメファイル、拡張子.pch
、.spch
、レイヤー情報ファイル、拡張子.psd
、.chI
を管理画面からアップロードしてキャンバスに読み込んだ時に、config.phpの幅と高さの限界の設定が優先されて画像の縦または横よりも開かれるキャンバスサイズが小さくなって画像が切れてしまう問題を修正しました。
アップロードした個別ファイルの幅と高さが優先されるようになりました。
画像をポップアップ表示した時の背景の暗さを不透明度0.6から0.65に変更しました。 ほんの少しの変化ですが、画像の背景がより暗くなるようにしました。
CheerpJは、Javaアプレットをブラウザ上でJavaScriptに変換するツールです。
これまでのCheerpJ v2では、JavaアプレットのしぃペインターやPaintBBSの動的パレットの明るさの調整やグラデーションの作成ができませんでした。
また、描画アニメの再生も途中経過を表示する事ができずいきなり最後の結果が表示されていました。
PaintBBS NEOは、funigeさんが1から作り直したものですが、SNSではPaintBBS NEOのことを「しぃペインター」と呼ぶ流れになっており、今でも「しぃペインター」が使えるという話になっていて、少しややこしいのですが、「お絵かきしぃ掲示板PaintBBS」と「しぃペインター」は作者であるしぃちゃんによれば別のアプリです。
そして、PaintBBSはPaintBBS NEOに置き換えられましたが、しぃペインターは依然として2004年に作られたJavaアプレットのままです。
その古いJavaアプレットを最新の技術で、Javaアプレット非対応ブラウザのChromeで動作させるためにCheerpJを使用しています。
CheerpJのv3では残念ながらXAMPPのLocalhostでは動作しない設計になっており、しぃペインターの投稿も失敗します。 ローカル環境ではなく、インターネット上に公開されているJavaアプレットのみをサポートしているためこれはCheerpJの仕様といえます。
大きな進化を遂げたCheerpJ v3.0ですが、もしv3.0で問題が発生する場合は、以下の設定項目をconfig.php
に追加すれば、CheerpJ v2.3を使用する事もできます。
CheerpJ v3.0で問題が無い場合は、設定項目の追加は不要です。
設定項目が存在しない場合は、v3.0が使用されます。
//CheerpJ の旧バージョンを使用する する:1 しない:0
//最新バージョンで問題がでる場合は、する:1
define("USE_CHEERPJ_OLD_VERSION","0");
画像をポップアップ表示する時に使用していたLuminousの開発が中止になり、中止されただけでなくLICENSEファイルもリポジトリから削除されてしまったため、LICENSE不明になってしまいました。
そのため、Lightboxを使用してポップアップ表示する事にしました。
しかし、Lightboxでは、Luminousではできていたいくつかの事ができません。
そのためLightboxを改造して、見た目と機能をLuminousに近づけてその問題を解決しました。
- 透過PNGを透過させる
Lightboxでは背景色が白になってしまうため、背景部分を透明にして透過PNG画像の背景が透明になるようにしました。 - 画像長押しで保存
Lightboxでは画像の長押しで画像を保存できない仕様のため、CSSを調整して画像の長押しで画像を保存できるようにしました。 - 前後のナビゲーションバーの位置を変更 画像の上に表示されていた前後の画像を表示するための矢印を、左右の横幅からの位置に変更して、左右に余白があるときは画像の上でではなく、画面の左右にナビゲーションの矢印を表示するようにしました。
- 閉じるボタン
前後ナビゲーションの矢印以外のどこを押しても画像を閉じるようにしました。
そのため閉じるボタンは必要がなくなりました。 - 画像読み込み中の画像
ローディング中の円のGIFを、透過PNGで作成した大小ふたつの円に変更。CSS3で画像が回転します。
PHPでエラーが発生している時にPaintBBS NEOでエラーを検出できず画面が移動して描いているイラストが消えてしまう問題を修正しました。。
サーバから「ok」という文字列以外が返って来た時には、「投稿に失敗。時間を置いて再度投稿してみてください。」というアラートを開いて、投稿に失敗した事を知らせます。
ペイント画面から移動しないので、描いているイラストはキャンバスに残ります。
PHPのエラーが解消されれば、投稿可能になります。
HTMLにセットしたCookieの値と、実際のCookieの値を照合するシステムを廃止。
投稿時にCookieが存在しない場合もユーザーコードのCookieを再発行して投稿できるようにしました。
ユーザーのブラウザからCookieが消えた場合だけでなく、サーバのWAFの設定によってCookieが照合できなくなる問題にも対応できていると思います。
また、PaintBBS NEOとしぃペインターの拡張ヘッダに情報を詰め込んでいましたが、拡張ヘッダではなく、GETパラメータで取得する方式に切り替えました。
互換性維持のため、GETで取得できない場合は拡張ヘッダでも取得できるようにしました。
- 「ctrl+r」による再読み込み、「ctrl++」によるブラウザ全体の拡大縮小、「ctrl+h」による履歴の表示「ctrl+s」によるページを保存といったブラウザのデフォルトのショートカットをChickenPaint、Tegaki、Klecksのペイント画面で無効化しました。
- ChickenPaintのショートカットキーを変更。「ctrl+y」をやり直し、「ctrl+h」を変形にしました。
- Macの時はマスク適用、マスク削除のショートカットキーを「⌘+」に。
これは、かなり以前から存在していた問題です。
「透明部分を保護」等のチェックボックスや「合成方法」等のセレクトボックスを操作すると、ChickenPaintのショートカットが効かなくなる問題がありました。
ショートカットが使えなくなった時は、画面のどこかをペンでタッチするとショートカットが再び使えるようになるので、操作を続行できにはできていたのですが、「ctrl++」で画面を拡大しようとした時にブラウザのショートカットが有効になりUIが拡大されてしまったり、「ctrl+s」で画像をPCに保存しようとしたらブラウザのデフォルトのショートカットとして認識されてしまって、画像の保存ではなくHTMLが保存される等の問題が発生していました。
時間がかかりましたが、何とか問題を特定し、解決方法を見つける事ができました。
問題があった箇所を操作しても、ChickenPaintのショートカットは有効なまま維持されます。
ブラウザのデフォルトのショートカットと入れ替わってしまう問題は解消されました。
しかし、念のため、UIの拡大のショートカットに使用される「+」「-」と、保存に使用される「s」のブラウザのショートカットキーを最初から無効化する処理も追加して、意図しない動作にならないようにしました。
-
ズームの拡大率を141%に、縮小率を70.92%に変更しました。
これまでは、拡大時に200%拡大され、縮小時には50%に縮小されていました。 この拡縮率は大きすぎるため、二度拡大すると200%になるように調整しました。
また、拡大縮小を繰り返すと、100%、200%または50%に戻らなくなる事がありました。
拡大縮小を繰り返しても、100%、200%または50%に正確に戻るようになりました。 -
70.92%に縮小した時に描線がガタガタに表示されてしまうため、ズーム時に補完して表示するオプションをデフォルトで有効になるようにしました。
ドットの状態を確認したい時には、この機能をオフにする必要があるため「表示」→「ズームをなめらかに表示する」をオフにしてご利用ください。
- ショートカットキー一覧、送信ダイヤログの未翻訳箇所の日本語訳を追加しました。
「Right」「Left」も「右」「左」に翻訳しました。
この間の更新でレイヤーマスクやブラシサイズのスライダーのショートカットキーも追加されていますので、見やすくなったショートカットキー一覧のヘルプをぜひご利用ください。
ドロップダウンメニューのメニュー項目にカーソルを合わせた時に英語の説明文が表示されていましたが、表示する項目を整理して必要なものだけ残し、それを日本語に翻訳しました。
レイヤーマスクのサムネイルをクリックして使用するショートカットキーを追加しました。 これにはマニュアルに記載がなかったものの機能として最初から存在していたものも含まれます。
- シフト+クリックでレイヤーマスクの表示/非表示
- alt+クリックでレイヤーマスクのマスク部分を表示
- ctrl+クリックでレイヤーマスク適用
- シフト+ctrl+クリックでレイヤーマスク削除
このショートカットキーの追加で、レイヤーパレットの右クリックメニューに存在していた処理を行う事がでるようになりました。
どのぐらいの方が使っていたのかわかりませんが、レイヤーパレットの右クリックメニューにはグループ結合や、レイヤーマスクの表示/非表示等数多くの項目が存在していました。
CSSフレームワークBootstrapをBootstrap4からBootstrap5対応に変更する作業で、この右クリックメニューを再実装する事ができなかったため、多くの埋め合わせを行いました。
レイヤーパレットにグループ結合アイコンを追加したのもそのためです。
しかし、iPad等最初から右クリックが使えない環境の場合は、より操作しやすいChickenPaintになっていると思います。
トップページの静的HTMLにアクセスするだけではブラウザにCookieはセットされませんが、その静的HTMLのトップページからペイントボタンを押した時にCookieの有無をチェックする機能が働いて、「Cookieが存在しません」というエラーになっていました。
ペイントボタンを2回押せば動くには動くのですが、静的HTMLからのpostでCookieを確認するのは無理があるので、ペイント時にはCookieを確認しないようにしました。
通常の下のレイヤーと結合で結合するとクリッピングが解除されてしまいますが、レイヤーグループ内で下のレイヤーとクリッピングしていれば、グループ結合でレイヤーを結合しても、クリッピングが維持できます。 また、たくさんレイヤーがある時はグループ化して閉じればレイヤーパレットの場所を取らず便利です。
しかし、これまではグループレイヤーを結合するには右クリックメニューから選ぶか上段のメニューからグループ結合を選択する必要がありました。
そして、レイヤーの右クリックメニュー機能を再実装できなかったので、実質上のメニューか、ショートカットキーでしか操作できなくなっていました。
そこで、レイヤーパレットに「グループ結合」アイコンを追加しました。
1タップで、グループフォルダ内のレイヤーを結合して1つにします。
レイヤーパレットのマスクアイコンの動作を変更しました。
選択しているレイヤーにマスクが無い時は「マスク追加」になり、マスクが存在している時は「マスク適用」に変わります。
これによりペン操作で簡単にレイヤーマスクを適用できようになります。
これまでの、マスクアイコンには「マスク追加」機能しかありませんでした。
- SHIFT+Mでマスク削除
追加されたショートカットキーの一覧はこのページを確認して覚える必要はありません。
メニューの横にショートカットキーが表示されていますので、追加されたショートカットキーはそこからご確認できます。
- 右クリックで、ブラシパレットのスライダーが緩やかに変化するようになる機能を改善しました。
従来は、ブラシサイズと、不透明度以外のスライダーも右クリックによる緩やかなスライダーの変化の動作に入っていましたが、スライダーの種類によっては28%や56%でスライダーが動かなくなる等の問題が発生していました。
また、右クリックしながらスライダーを調整するのは結構面倒です。
- 右クリックによるドラッグに加え、SHIFT+左ドラッグでもスライダーが緩やかに変化するようにしました。
ペンを使っている時は、シフトキーを押しながらペンでスライダーを調整するだけで緩やかに変化するようになります。 - ブラシサイズと不透明度以外の期待通りに動作しないスライダーには緩やかなスライダーの変化を適用しないようにしました。
ブラシサイズと不透明度以外のスライダーが途中で止まったり、スライダーが入力できなくなったりする項目のスライダーは最初から緩やかに変化するスライダーのモードに入らないようにしました。
「ChickenPaint」のロゴ部分を「ChickenPaint Be」に変更して、改造版である事が一目でわかるようにしました。
掲示板のエンドユーザーの方には直接関係ありませんが、「ChickenPaint Be」のソースコードはここにあります。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
改造したものを再配布する時のライセンス上の条件にソースコード公開の義務があります。
そのためヘルプページにも「ChickenPaint Be」のGitHubのリポジトリのURLを記載しました。
- レイヤーを変形しようとした時にレイヤーが非表示または不透明度0%の時にも、非表示、不透明度0%というメッセージをポップオーバーで出すようにしました。
これまでは、単に変形できないだけで、なぜ変形できないのかを説明するメッセージの表示がありませんでした。 - レイヤー名をマウスで変更できなくなっていたのを修正しました。
ペンタブレットやタッチデバイスの場合はダブルタップでレイヤー名の変更が可能ですが、マウスではそれが出来ません。
従来は、マウスの右クリックで、「マスク追加」「クリッピング」「レイヤー名変更」などのコンテキストメニューが開いていたので、そのメニューを使ってレイヤー名を変更する事が可能でした。
しかしながらBootstrap5に更新した結果、同じコンテキストメニューを表示を表示する事が困難になってしまったため、マウスの場合は右クリックでレイヤー名の変更になるようにコードを変更しました。
たったそれだけの作業でしたが、解明が困難な軽微なエラーメッセージが表示される問題を解決するためだけに20時間以上費やしてしまいました。 - ファイルメニューで「PCに保存」(CTRL+S)した時のファイル名に投稿日時分秒が入るようになりました。
これによりファイル名を変更して保存しなくても、同一フォルダに途中経過を保存できるようになりました。 これまではファイル名が「oekaki.png」固定でした。
改造版に固有の機能が存在し、オリジナルには存在している機能が無くなっている事や、改造版に固有の問題が発生している可能性もある事から、オリジナルの「ChickenPaint」と区別するために、改造版の「ChickenPaint」の名称を「ChickenPaint Be」としました。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
- Bootstrap4ではjQueryで制御していた箇所が、Bootstrap5ではJavaScriptとなり、大幅なコードの書き換えが必要になりました。
また、従来の書き方を単に置き換えただけでは意図した動作にならないケースがいくつかあり、新しく処理を追加して対応しました。
気が遠くなるような作業量でしたが、将来廃止予定のJavaScriptがBootstrap4のコードに入っていたため、これから先の数年後もChickenPaintが使えるようにするために必要な作業でした。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
↑ ビルドするためのソースコードはここにありますので、気になる方はご確認ください。
ChickenPaint-Bootstrap5.-Petit.Note-Chrome-2024-01-07-10-55-53-Trim.mp4
- 変形確定前にレイヤーを追加しようとすると変形を確定する取り消すなどの操作を促すダイヤログが表示されますが、従来の動作では、変形確定のエンターキーの押下で変形は確定されるものの、ダイヤログはすぐには消えず、レイヤーの追加も行われませんでした。
今回の修正により、エンターキーによる変形の確定と同時にダイヤログは閉じられ、かつ、レイヤーも追加されるようになります。
また、一連のダイヤログの日本語対応も行いました。
ChickenPaintのグリッド設定で数値入力確定のエンターキーを押下すると、掲示板トップに画面が移動して描いていた絵が消えてしまうバグを修正しました。
- 独自カスタマイズ版のChickenPaintを更新しました。
描画時の円カーソル表示を別の方法で再実装しました。
タッチデバイス以外のPC等で描画時にも円カーソルを表示します。
- Altキーのキーアップのデフォルトの動作をキャンセルしてこの問題を修正しました。
- PaintBBS NEO+Firefox時の問題は解決できましたが、CheerpJを使って起動したしぃペインターでは、AltキーでFirefoxのメニューバーの表示/非表示の動作が発生してしまいます。 CheerpJが起動した時点で、キーアップイベントの取得ができなくなるようです。 Chromeではこの問題はなく、FirefoxとFirefox派生ブラウザで発生します。
- 「Altキー」押下直後にショートカットキーが効かなくなる問題が、tegaki.jsでも発生していました。
- ChickenPaintと同じように「Altキー」を離した時点で「altキー」のデフォルトの動作をキャンセルする事でこの問題を解決しました。
- 個別スレッド時のスレタイへの個別スレッドの固定リンクを追加しました。
- メインページ同様スレタイをクリックすると、その個別スレッドが表示されます。
- 個別スレッド表示時に、スレタイをクリックするとスレッドをリロードできるようになります。 (テンプレートBASICのみ)
Waterfox Classic | Waterfox Classic 「Pale Moon」古い「Firefox」の拡張機能も動作する派生版Webブラウザー - 窓の杜
該当ブラウザは上記URLからダウンロード可能です。
IEとEdgeのIEモードではオラクルのJava8の32bit版を使いますが、「Waterfox Classic」と「Pale Moon」は64bit版のJava8が必要で、EdgeのIEモードも、「Waterfox Classic」と「Pale Moon」も使いたい時は、32bit版のJavaと64bit版両方のJavaのインストールが必要です。
この「Waterfox Classic」と「Pale Moon」でJavaプラグインを使ったしぃペインターを起動する事はできていましたが、投稿に失敗する状態だった事がわかりました。
独自に追加したセキュリティチェックでエラーになっていました。
この問題を修正して、「Waterfox Classic」と「Pale Moon」でも、Javaプラグインを使ったしぃペインターからの投稿ができるようにしました。
Windowsであれば、EdgeのIEモードを使う事でJavaプラグインによる安定した環境でしぃペインターを利用可能でしたが、Macでは、「Waterfox Classic」や「Pale Moon」を使うしかJavaプラグインを使う方法が存在しないため、対応しました。
どうすれば手動でJavaをダウンロードしてWindowsコンピュータにインストールできますか。 オラクルのJava8のインストールはここから
インストールしても、例外サイトリストに登録しないと起動しません。
若干不安定ではあるものの、Google ChromeではCheerpJでJavaプラグインを使用しなくてもしぃペインターが起動します。
また、ネット上で「しぃペインター」という用語で呼ばれているレイヤー2枚の「お絵かきしぃ掲示板 PaintBBS」は、「しぃペインター」ではなく「PaintBBS」です。「PaintBBS」はHTML+JavaScriptの「PaintBBS NEO」へ移行しているため、Javaは必要なく、上記のJava関連の問題とは関係ありません。
-
しぃペインターから送信された画像の破損チェック機能を追加しました。
しぃペインター以外のお絵かきアプリにはすでに実装ずみの画像の破損チェックを追加しました。
画像の破損が確認された場合は、お絵かき画面から移動せず、スクリーンショットの撮影を促すエラーメッセージを出します。 -
PaintBBS NEOではない、古いJavaのPaintBBSからの投稿時に、ツール名が「Shi-Painter」になっていたのを「PaintBBS」になるように修正しました。
HTML5版のPaintBBS NEOとは別の古いJavaAppletのPaintBBSから送信されたデータの場合はツール名が「PaintBBS」になるようにしました。
JavaプラグインではPaintBBSからの送信に失敗し、CheerpJv2.3からの送信の場合にも失敗しますが、CheerpJv3では成功するため、古いpchデータをキャンバスに読み込んで送信する事が可能になります。
その時のツール名が「PaintBBS」になるように調整しました。
CheerpJ のv3は、正式版がでてから対応する予定です。
お絵かきアプリから送信されたPNG画像が破損していたら、お絵かき画面から移動せず、スクリーンショットの撮影を促すエラーメッセージを出すようになりました。
ImageCreateFromPNG()
で画像を生成する事ができるかどうかチェックする事で、画像が破損しているかどうかを検出する事に成功しました。
これにより、画像が破損した状態で投稿され作品が失われる確率をさげる事ができました。
psdファイルやchiファイル等アプリ固有ファイルのチェックは含まれていません。固有ファイルが破損して、同時に画像を上のレイヤーで隠している場合は、画像の復旧ができませんのでご了承ください。
破損状況を確認する事ができたのはPNG形式の画像のみです。
- Tegakiのみを使う設定の時にお絵かき機能が有効にならないバグを修正しました。
- CheerpJ v3で動的パレットの明るさの明+明-が動くようになります。
しかしながら、掲示板のJavaScriptにも手を加える必要があり、なおかつEdgeのIEモードやFirefox51等でオラクルのJava8を使った時にもパレットを動作させる必要があります。
それぞれに対応するため処理の追加と振り分けができるようにしました。
具体的にはJavaScriptのawait
が使用可能かどうかUAから判断して、利用可能な場合はasync
、await
をJavaScriptに追加します。
- Exifを解析して位置情報が検出された時はGDで作成した画像で上書きして位置情報を削除するようにしました。
- Exifに画像の回転情報が入っている時は、画像の向きを修正した新しい画像を作成するようにしました。 これにより例えばスマホの縦長の写真 をアップロードした時に、横長になってしまう問題が解決するかもしれません。
- デジカメ写真や印刷用途の解像度のイラストはWebへのアップロードには適していない場合があります。
- 今回の更新では、Petit Noteですでに採用ずみの処理を使い、1024px以上の画像を1024px以内に収まるようにします。
これにより、「大きな画像はアップロードする前に縮小してください」とお願いしなくても、自動的に適正サイズに縮小されます。
ただし、あまりにも過大なファイルサイズの場合はサーバで処理できずアップロードがそもそもできない事が多いので、すべてのケースをカバーできる訳ではありません。
//アップロード時の幅と高さの最大サイズ これ以上は縮小
define("MAX_W_PX", "1024"); //幅
define("MAX_H_PX", "1024"); //高さ
添付した画像がこの幅と高さの範囲を超えていたらサムネイルではなく投稿される画像そのもののサイズが範囲内に収まるように縮小されます。 設定項目が存在しない場合は、幅、高さともに1024pxで固定になります。
- お絵かきアプリの幅と高さの最低値はこの間300px固定でしたが、100x100pxの絵を描きたいという要望もあり、エンドユーザーの方が自分で改造しているケースがありました。
今回の更新で、幅と高さの最低値をconfig.phpで設定できるようになりました。
これにより、改造しなくても、100x100pxのサイズも選択可能になります。
極端な例になりますが、10x10pxの絵も描けます。
//お絵描き最小サイズ(これ以下は強制でこの値
define("PMIN_W", "300"); //幅
define("PMIN_H", "300"); //高さ
config.phpのどこでも構いませんので、上記設定項目を追加すれば、最小サイズの幅と高さを設定できます。
設定項目が存在しない時は、これまで通り最小値が300px固定になります。
- 幅300px以下の時にレイアウトが崩れていたPaintBBS NEOを独自にカスタマイズ 横幅が300px以下でも、操作に支障がでないようにPaintBBS NEOのCSSを調整しました。
これまでは、操作のためのボタンがキャンバスの内側に入り込んでいました。
ただし、この表示はオリジナルのPaintBBSと異なってしまうため、開発元のリポジトリにはプルリクエストを行わず、POTI-boardとPetit Note用の独自版とします。
といってもCSSを2行追加しただけであとは同じものです。
メール通知機能関連のコードを整理しました。削除できる箇所は削除し、未定義になる可能性のある箇所は未定義にならないように処理し、エスケープが必要な箇所にはエスケープ処理を追加しました。
メールで通知される記事のURLに投稿時刻のIDを追加して、URLをクリックした時に該当記事までスクロールするようにしました。
依存関係の脆弱性を修正して、再度ビルドしたChickenPaintを同梱しました。
これまでのPOTI-boardは、返信画面に1件のコメントしか表示しない場合でも、ログファイルに1万発言記録されている時はその1万発言分のデータを読み込んでいました。
この問題を解決するため、返信画面とカタログ画面を表示する時に、必要な部分のみをログファイルから取得できるようにしました。
掲示板の返信画面で5MBメモリを消費していた実際に運用している掲示板のメモリ消費量は半分の2.5MBですむようになりました。
該当の掲示板ではカタログモードの時にも5MBメモリを消費していましたが、2.5MBのメモリ消費量で動作するようになりました。
独自改造版のtegaki.jsを更新しました。 ブラシサイズや不透明度の数値による直接入力を改善しました。上矢印キーで数値が上がり、下矢印キーで数値が下がります。
直前の投稿に真っ白な画像が投稿されていると、同じサイズで同じく真っ白な画像が投稿不能になります。
時々、実際には何時間もかけて描いているのに時間をかけて描いたレイヤーを非表示にして真っ白な画像を途中経過として投稿する人もいます。
そのような時に、その投稿が「同じ画像がありました。」というエラーにならないようにするための措置です。
- アプリ固有ファイルのダウンロードの時に不正なmime typeのファイルが検出された時には、エラーになるように修正しました。
ChickenPaintの.chi
形式ファイルの受信時の、mime typeチェックが行わていませんでした。
不正な投稿が成立しないように様々な工夫を凝らしてはいますが、アップデートをお願いします。
tmp/
ディレクトリへの不正なファイルのアップロードが成立する可能性があります。
不正なmimeタイプのファイルは移動前にmime typeがチェックされているためsrc/
ディレクトリに移動する事はありません。
拡張子はプログラム側で.chi
固定になっています。不正なファイルの拡張子が.php
や、.cgi
、.exe
などになる事もありません。
返信画面下段の6つ並んでいる前後のスレッドの画像の表示を改善しました。
表示しているスレッドの位置にもよりますが、現在のスレッドより手前の3つと現在のスレッドより後ろの3つに分割しました。
表示するときに、3枚+3枚で合計6枚の現在のスレッドの前後の画像を表示します。
現在の位置より手前の画像が3枚存在しない場合は、現在の画像より後ろの6枚を表示して、可能な限り、6枚の画像がならぶように調整しました。
- ChickenPaintの送信処理を古いxhrからfetch APIに書き直しました。
(PaintBBS NEO、Tegaki、klecksはすでにfetch APIを使って送信しています) - 新規投稿の時も返信の時も投稿完了後に該当スレッドを表示するようにしました。 これまでは、新規投稿時は掲示板のトップを、返信の時は該当スレッドが表示されていました。
ペイント画面で入力したものをそのままツール名としてログファイルに記録していました。
仮に不正な文字列が入力された場合でも、ログファイルのバージョンが6ではなく5として扱われるだけの被害にとどまるとは思いますが、バリデーションをほどこして、予想されるツール名以外のツール名が入力された時は空白を記録するようにしました。
出力時のバリデーションはすでに実施ずみでした。
また、ツール名にJavascriptが含まれている場合でも、テンプレートの出力時にHTMLの特殊文字はエスケープしていますので、xssなどのリスクはここには存在しません。
Web Style by BASICという表記はオリジナルのPOTI-boardを踏襲したものでしたが、英語圏ではbyに続く文字は作者名の事が多い事が多いため、Template BASICのような形式で記載する事にしました。
- search.inc.phpに、2286年問題が残っていたのを修正。(160年後の誤動作防止)
- ページングの最初のページと最後のページが表示できるようになりました。「最後」をクリックすると一番古い投稿を表示します。
- カタログモードの時に1ページに表示する画像の枚数が30枚で固定になっていたのを設定可能に。
- 使用したペイントツールの名称が表示されるようになりました。
- 2286年問題に対応。ユニックスタイムスタンプが11桁になっても正常に動作するようにしました。 (現実問題としては、2286年になる前にシステムが動かなくなっている可能性のほうが高いです。11桁になるのは263年後です。)
- 動画ファイルの種類、サムネイルの有り無しがログファイルに記録されるようになりました。これにより、毎回ファイルの存在確認をしなくてもよくなるため負荷を下げる事ができます。
このver6.0用に作成されたログファイルは、ver1から、ver5までのすべてのPOTI-boardで使用できます。
ver6.0で新たに追加されたログファイルの情報は古いPOTI-boardでは読み込む事ができませんが、古いバージョンのPOTI-boardでは新しく追加された情報を無視して動作します。
ログファイルの変換の必要もなく、ver6.0以後のPOTI-boardを使用した時には、新しい情報が追加され、古いログファイルにはその情報が存在しないだけです。
- テンプレートMONO使用時に、続きを描く画面で「Tegaki」が選択できなくなっていたのを修正しました。
- 続きを描く画面で余分な波括弧が表示されていたのを修正しました。
- 検索画面で次ページのリンクが正しく動作していなかったのを修正しました。
//管理画面へのリンクを表示する する:1 しない:0
define("USE_ADMIN_LINK", "1");
//しない:0 で、管理画面へのリンクが表示されなくなります。
設定項目が存在しない場合は、従来と同じ動作になり、管理画面へのリンクが表示されます。
検索機能が動かなくなっていました。 このバグは、v5.58.10で発生し、v5.62.2で修正されました。
「Twitter」以外の、「Mastodon」「Misskey」等の短文投稿SNSに投稿を共有できるようにしました。
config.phpで設定すれば以前のツイートボタンに戻す事もできます。
また、共有するMastodon、Misskeyのサーバ一覧を編集する事もできます。
英語圏最大の画像掲示板で使われているお絵かきアプリ「tegaki.js」に対応しました。
現時点では、続きを描くと描画アニメは消えてしまいます。
(NEOの画像から続きを描くと同じ)
非推奨のJavaScript、jQueryの構文を独自に修正したものを同梱しました。
投稿者名をコピーボタンを押したときに、テキストカーソルの位置に名前が挿入されるようになりました。
これまではテキストフィールドの文末に追加されていました。
- PaintBBS NEOをv1.6.0に更新しました。独自拡張版として運用していたバージョンを開発元にマージしていただく事ができました。
- ChickenPaintの独自修正版を同梱しました。
- WCS動的パレットスクリプトのsubstr()をsubstring()に書き直しました。 String.prototype.substr() - JavaScript | MDN MDN
古いバージョンでは、続きを描く→新規投稿を選択すると新しいスレッドへの投稿になっていました。
たとえば1枚の線画の塗り絵を10名が行う時に10スレッド必要でした。
これを1つのスレッドにまとめる事ができるようになります。
また返信として投稿されたお絵かき画像からの続きを描く時には、同じスレッドへの投稿になるようにしていましたが、こちらも返信からの新規投稿を新しいスレッドに投稿したい場合があり、自由に選択できるようにするべきという結論に達しました。
その選択のために「同じスレッドに投稿する」というチェックボックスを追加しました。
しかし「画像差し換え」の場合は同じスレッドに投稿するより他ないためこの選択肢は不要です。
そこで、JavaScriptを使って、新規投稿を選択した時のみ「同じスレッドに投稿する」というチェックボックスを表示するようにしました。
- 従来のお絵かき掲示板に投稿できるようにするために、生データを送信していたNEOを改造して、formDataでヘッダ、画像、動画データを送信できるようにしました。
この変更によりWAFがNEOの送信データを攻撃と判断して遮断する確率が低くなり投稿が成功する確率が飛躍的に高くなります。
NEOはこれまで生データを古い掲示板との互換性を確保するために送信してきました。今回の独自拡張でによってそれが、formDataに変わります。 現時点では独自規格ですが規格が乱立するのはよくない事ですので、開発元にプルリクエストを出しています。
- しぃペインターのデータの受信はこれまで通り、
picpost.php
で行います。
しかし、PaintBBS NEOのデータの受信は、新しく追加した、saveneo.php
で行います。
このファイルのアップロードを忘れると、NEOからの投稿ができなくなりますので、必ずアップデートしてください。
potiboard.phpと同じディレクトリに転送します。 - Paint画面のテンプレートの更新
mono_paint.blade.php
paint.blade.php
の更新をお願いします。
formDataで送信するモードに切り替えるためのパラメータが追加されています。
ここで重要なのは、neo.jsがブラウザによってキャッシュされている場合です。
新しいバージョンのneo.jsがブラウザに読み込まれる前に、その他のファイルが更新された時は、saveneo.phpによる受信に失敗します。
//PaintBBS NEOを使う 使う:1 使わない:0 define("USE_PAINTBBS_NEO", "1"); //しぃペインターを使う 使う:1 使わない:0 define("USE_SHI_PAINTER", "1"); //ChickenPaintを使う 使う:1 使わない:0 define("USE_CHICKENPAINT", "1"); //klecksを使う 使う:1 使わない:0 define("USE_KLECKS", "1"); //管理者は設定に関わらすべてのアプリを使用できるようにする する:1 しない:0 define('ALLOW_ADMINS_TO_USE_ALL_APPS_REGARDLESS_OF_SETTINGS', '1');
これまでは、PaintBBS NEOを使用するアプリから外す事ができませんでしたが、NEOを使う使わないも選択可能になりました。
すべて使わないに設定すると、お絵かき機能を使用しない設定になります。
Klecksだけ使う、ChickenPaintだけ使う設定にする事もできます。
使用するアプリが1つしか無い時はアプリ選択のプルダウンメニューが消えてすっきりした画面になります。
たとえば1分以下で描いた線だけの投稿は拒絶したい時は、
//セキュリティタイマー(単位:秒)。設定しないなら""で
define("SECURITY_TIMER", "");
で必要最低限の描画時間を指定する事ができましたが、これまでは、しぃペインターと、PaintBBS NEOにのみ有効でした。
今回の更新で、ChickenPaintやKlecksでもこの設定が有効になるようになりました。
古い方式では、違反の時は別のサイトに飛ばす(例えば警視庁のサイト)がありましたが、その方式ではなく、「描画時間が短すぎます。あと30秒。」といった内容のアラートが開きます。
- PaintBBS NEOとJavaのしぃペインターの動画の管理者画面からのアップロードペイントがより簡単・便利になりました。
これまで動画ファイルをキャンバスに読み込む前にキャンバスサイズを指定する必要がありました。
v5.52で、動画ファイルからキャンバスサイズを自動的に取得できるようになりました。
ただし、Java版のPaintBBSの動画ファイルのアップロード時にはキャンバスサイズの指定が必要です。(v5.22.8で解決)
HTML5版のPaintBBS NEOの動画ファイルのアップロード時のキャンバスサイズは自動取得できます。
↑
これは、しぃペインター、PaintBBS NEO、Klecks、ChickenPaintそれぞれの固有形式のファイルを管理者画面からアップロードした時の動作を紹介するために制作したGIFアニメです。
キャンバスサイズは300x300のままですが、本来のサイズでキャンバスが開いています。
PSDファイルのダウンロードができるのならアップロードは?と疑問に感じていた方への説明の意味も含めて、ChickenPaintの.chi
ファイルと、Klecksの.psd
ファイル(Photoshop形式)のアップロードも行い動画に記録しました。
- Klecksを日本語に翻訳しました。
POTI-boardにも、日本語対応版を同梱する事ができました。 この新しいバージョンのKlecksは、ブラウザの言語の優先順位を自動検出して言語を切り替えてくれます。
また、ブラウザの言語の設定にかかわらず使用する言語を指定する事もできます。
英語、ドイツ語、日本語が選択できます。
中文は簡体字のみで細部はまだ英語のままです。
日本語訳のリソースはすでに開発元に統合されています。
.pch
ファイル(PaintBBS).chi
ファイル(ChickenPaint).psd
ファイル(Klecks)
Klecksのレイヤー情報を含むファイルはPhotoshop形式の.psd
ファイルです。
ダウンロードした.psd
ファイルはクリスタやSAIそのほか多くのアプリで開く事ができます。
.pch
と、.chi
は、それぞれNEOとChickenPaintで開く事ができます。
管理者投稿過画面から.pch
、.chi
、.psd
を添付してペイントボタンを押せば、キャンバスに読み込んで投稿できます。
- 透過PNGの透明部分がJPEG化する時に、真っ黒になっていたのを修正しました。
透明色が黒も間違いではないのですが、意図しない結果になる事が多いため、透過GIF、透過PNGからJPEGに変換する時は、透明色を白に変換します。
- 新しいペイントアプリKlecksに対応しました。
わかりやすいUIと強力なブラシが使えるアプリです。
レイヤーは8枚使えます。
数多くのフィルタが使えます。輝度を透明に変換、明るさ/コントラスト、色調補正など。
このアプリの追加にともない、管理画面からアップロードできるファイル形式に「PSD」が追加されました。
PSDファイルを選択してペイントボタンを押すとKlecksのキャンバスにPSD画像が読み込まれます。
- 複数の未投稿画像がある時に、一番新しい画像が投稿できるようになりました。
これまでは、コメント欄のすぐ上の画像は投稿されず画面の一番上の画像が投稿されていました。
- 返信画面の下に前後のスレッドと前後のスレッドの画像が表示されるようになりました。
- レスの画像からの続きを描く時は「新規投稿」もレス画像になりました。
これまでは、レスの画像から「新規投稿」で続きを描くと新規スレッドが作成されていました。 - 返信したあとに表示される画面がスレッドの返信画面になりました。 これまでは、どの位置のスレッドに返信しても、投稿処理が完了するとトップページが表示されていました。
- レスモード、カタログモードからの編集・削除の処理の完了時にもとの画面が表示されるようになりました。
- 続きを描いて投稿が完了した時にスレッドの返信画面が表示されるようになりました。
これまでは、35ページ目にある画像から続きを描いた場合でも投稿が完了した時にトップページが表示されていました。
そのため、投稿した画像がどこにあるのか探さなければならなくなっていました。