最近更新: 2012-05-19

雙螢幕桌布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島上取得的那些雜誌掃圖,都可以用來作直立螢幕的桌布了。哈哈。

樂多舊網址: http://blog.roodo.com/rocksaying/archives/19490282.html