PHP Imagick でPDFをPNGに変換
はじめに
今回、DBに格納したPDFバイナリ(BLOB)をAPI側でPNGに変換してレスポンスする処理をメモっときます。
いきなりですがPHPコード
$im = new imagick(); $im->setResolution(96, 96); $im->readimageblob(/** SELECTしたBLOB **/); $im->setImageIndex(0); $im->setImageBackgroundColor('#ffffff'); $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); $im->setImageFormat("png"); $im->setOption('png:compression-level', 5); $im->stripImage(); $im->thumbnailImage(/** 表示幅 **/, 0);
$image = $im->getImageBlob();
header('Content-Description: Image File'); header("Content-Type: image/png;"); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Disposition: inline'); header('Content-Length: ' . strlen($image)); echo $image; exit;
ざっくり補足
setImageIndex(0) 、 今回のPDFは1ページだけなので、ループなし。
ヘッダ「Content-Type」 、 HttpClientでは取得できなかった。
出力で四隅に余白ができるので、もう少し処理を足せばぴったり作れる・・が、
(今回は余白できても良かったので気にしない感じ)
setResolution(96, 96)、 Windowsを意識した。
thumbnailImage(/** 表示幅 **/, 0) 、 今回のPDFはA4限定だから、高さはゼロで良い。
setOption('png:compression-level', 5)、 公式ドキュメント参照
CISCO 841M 設定:15:IPV6(DS-LITE)を試してみた
IPV6(DS-LITE)
とりあえず、つながるところまで
ipv6 unicast-routing
ipv6 cef
bridge irb
bridge 1 protocol ieee
bridge 1 route ip
interface Tunnel1
ip address 192.0.0.2 255.255.255.252
tunnel source GigabitEthernet0/5
tunnel destination [AFTRのIPv6アドレス]
tunnel mode ipv6
tunnel path-mtu-discovery
interface GigabitEthernet0/5
no shutdown
ipv6 address autoconfig default
ipv6 enable
ipv6 dhcp client pd PREFIX
bridge-group 1
interface Vlan1
ipv6 address PREFIX ::1/64
ipv6 enable
ipv6 nd other-config-flag
ipv6 dhcp server STATELESS
bridge-group 1
ipv6 dhcp pool STATELESS
import dns-server
import domain-name
no ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 Tunnel1
ip route 0.0.0.0 0.0.0.0 Dialer1 ← いらないはずだが、いる
少し問題
ipv6非対応のサイトが通信できてなかったので、Dialer1 の静的ルートも残したままになっています。V4とV6の共存でV4カプセルを自動で作ってくれるのかと思ったのですが、なんかうまくいっていないようで、上の設定だと「V6はTunnel1」「V4はDialer1」を通過している気がします。 また時間を見つけて試してみようかな。。[AFTRのIPv6アドレス]が違うのか、追加したルートが違うのか、なんでしょうねぇ・・・
WPF双方向データバインディング INotifyPropertyChangedとメソッド置換で遊んでみた
はじめに
INotifyPropertyChangedとメソッドを動的に置き換えて遊んでみました。業務でこんなことすると怒られます。というか動作保証できないし(汗) シュミで遊ぶときはこんな部品があっても良いかな。。。(最適化すると動かないけど)
INotifyPropertyChangedを実装する方法
単に何も考えず実装するとこんな感じかな。
・ViewModelプロパティ定義
public string BindText1 {
get { return this.bindText1; }
set {
this.bindText1 = value;
NotifyPropertyChanged();
}
}
趣味プロで実装するとこんな感じかな(笑)
・ViewModelプロパティ定義
・ViewModelクラスの親クラス
まとめ
好きこそものの上手なれ。 やればできそう、というようなことも会話で役に立つかもしれませんし、時間を見つけていろいろ遊んでみたいと思いますー
Joke-INotifyPropertyChanged-Implementが間違ってました。動くもので修正