雙螢幕桌布DIY製作程式
我的桌上電腦使用兩台螢幕,一直一橫。如果在 Windows XP 系統想要兩個螢幕上分別使用不同的桌布,需要一些小技巧。 有人介紹 DisplayFusion 這套軟體。但或許它調整過試用版可用的功能,我安裝後並不能分別設定桌布。 所以我又去思考如何自己動手作了。
自己動手製作雙螢幕桌布的技巧,請參考這位作者的說明:「雙螢幕不同桌布DIY教學」。 但我覺得用繪圖軟體修圖很麻煩,再說製作過程只需要方形區域的剪貼合併動作,所以我乾脆寫一個小程式來做這件事。
程式見下列內容。
<?php
$horizon = true;
$dspinfos = array(
array(
'height'=> 1200,
'width' => 1920,
'img_path' => '1.jpg'
),
array(
'height'=> 1920,
'width' => 1200,
'img_path' => '2.png'
)
);
$offset_x = 0;
$offset_y = 360;
###########################
$dsp_height = 0;
$dsp_width = 0;
if ($horizon) {
$dsp_height = 0;
foreach ($dspinfos as $dspinfo) {
$dsp_width += $dspinfo['width'];
if ($dspinfo['height'] > $dsp_height) {
$dsp_height = $dspinfo['height'];
}
}
}
else {
$dsp_width = 0;
foreach ($dspinfos as $dspinfo) {
$dsp_height += $dspinfo['height'];
if ($dspinfo['width'] > $dsp_width) {
$dsp_width = $dspinfo['width'];
}
}
}
$src_imgs = array();
foreach ($dspinfos as $dspinfo) {
$img_path = $dspinfo['img_path'];
if (preg_match('/\.jpg$/i', $img_path))
$img = imagecreatefromjpeg($img_path);
else
$img = imagecreatefrompng($img_path);
if (imagesx($img) != $dspinfo['width'] or
images($img) != $dspinfo['height'])
{
$timg = imagecreatetruecolor($dspinfo['width'], $dspinfo['height']);
imagecopyresized($timg, $img, 0, 0, 0, 0,
$dspinfo['width'], $dspinfo['height'],
imagesx($img), imagesy($img));
$img = $timg;
}
$src_imgs[] = $img;
}
$wimg = imagecreatetruecolor($dsp_width, $dsp_height);
$img = $src_imgs[0];
if (!imagecopymerge($wimg, $img,
0, 0, 0, 0,
imagesx($img), imagesy($img), 100))
{
echo "merge failed\n";
}
$img = $src_imgs[1];
if (!imagecopymerge($wimg, $img,
$dspinfos[0]['width'], 0,
$offset_x, $offset_y,
imagesx($img), imagesy($img) - $offset_y, 100))
{
echo "merge failed\n";
}
if (!imagecopymerge($wimg, $img, $dspinfos[0]['width'],
$dspinfos[0]['width'] - $offset_y,
0, 0,
imagesx($img), $offset_y, 100))
{
echo "merge failed\n";
}
imagepng($wimg, 'wallpaper.png');
?>
首先修改 $dspinfos 陣列中的螢幕長寬與想要使用的桌布圖檔路徑。 我的螢幕是兩台 1920x1200 解析度的螢幕,這是現在少見的解析度,不要照抄。 再者,螢幕一為橫式顯示,螢幕二為直式顯示,所以 $dspinfos 設定的長寬剛好相反。
其次,桌布圖檔可以用 jpeg 或 png 。 若圖檔放置的位置跟程式不在同一目錄下,請記得在圖檔路徑中加上目錄位置。 如果圖檔大小和螢幕大小不一致,我的程式會用最簡單的方法縮放圖像內容。 若是圖檔長寬比例和螢幕長寬比例不一樣的話,圖像內容縮放後會變形。 所以我建議先用簡單的編輯功能,調整圖檔大小與比例,再用這個工具產生桌布。
最後是座標偏移量的設定。如果兩台都是水平橫放並排的話,偏移量都是 0 。 比較麻煩的是一直一橫的排放方式,如同「雙螢幕不同桌布DIY教學」這篇文章所說。 這時請進入控制台,查看次顯示器的座標偏移值。

如圖1所示,我的次顯示器是垂直方向偏移360點。 所以我指派 360 給 $offset_y。
設定好基本狀態後,就可以執行這個工具了。這是用 PHP 語言撰寫的工具,請用 php5 執行它。 如果沒有顯示任何錯誤訊息,那麼你就會在目錄下看到一個名稱為 wallpaper.png 的雙螢幕用桌布圖檔。 以我的螢幕配置情形來說,這張新桌布圖檔看起來會像圖2。

最後用任何可以設定 Windows 桌布的工具,指派這張圖檔作為你的螢幕桌布,配置方式請選「並排」或「並列」。 實際使用效果如圖3所示。

寫了這個程式之後,我從 K島上取得的那些雜誌掃圖,都可以用來作直立螢幕的桌布了。哈哈。