0

いくつかの大きなこぶの後、ようやく自分のウェブサイトを整理する準備が整いました。画像のサイズ変更に問題があります。

画像サイズを制御するコードは次のとおりです。

'image' => $this->model_tool_image->resize($option_value['image'], 285, 85),

これにより、すべての画像が 285 x 85 になります。

私の問題は、カスタム ページに 6x1 オプション、3x オプションなどがあることです。したがって、画像をさまざまなサイズにする必要があり、できればリロード後も比率を維持する必要があります (ただし、実際には画像は大きくなりますが、855x255 など)。

$auto、max_width=100% (285/85 の代わりに) などを試しましたが、効果はありませんでした。

オプションサイズの制御はスタイルシートから来ると思いますが、私の人生では、4時間検索した後、このコードを取り除き、希望どおりに機能させる方法を見つけることができません.

スタイルシート以外に画像サイズを変更する別の方法は考えられません。これまでのところ、「自動」(サイズ) との関係は冗長です。

提案される前に、資金は絶対に 0 です。そのため、拡張機能や Mod などを購入することができません。あらかじめお詫び申し上げます

さらに追加: このコード:

'image' => $this->model_tool_image->resize($option_value['image'], $width == $auto, $height == $auto),

画像を元のサイズに戻しますが、エラーが発生します:

「通知: 未定義の変数: 373 行目の C:\xampp\htdocs\OC\vqmod\vqcache\vq2-catalog_controller_product_product.php の幅」

これは上記のコード行です ($auto を使用)。

では、画像コントローラーなどに追加して、さまざまなサイズの画像の複数のサイズ変更を許可し、半分のサイズの画像を作成できますか?

これが私がやろうとしていることです(画像形式で)

http://imageshack.us/photo/my-images/152/optionsimages.png/

2回目の編集:

私はこれを 3 日間いじっており、すべての既知のリソースを検索しました。参考までに、これは system/library/image.php のコードです。

/**
*
*   @param width 
*   @param height
*   @param default char [default, w, h]
*                  default = scale with white space, 
*                  w = fill according to width, 
*                  h = fill according to height
*   
*/
public function resize($width = 0, $height = 0, $default = '') {
    if (!$this->info['width'] || !$this->info['height']) {
        return;
    }

    $xpos = 0;
    $ypos = 0;
    $scale = 1;

    $scale_w = $width / $this->info['width'];
    $scale_h = $height / $this->info['height'];

    if ($default == 'w') {
        $scale = $scale_w;
    } elseif ($default == 'h'){
        $scale = $scale_h;
    } else {
        $scale = min($scale_w, $scale_h);
    }

    if ($scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png') {
        return;
    }

    $new_width = (int)($this->info['width'] * $scale);
    $new_height = (int)($this->info['height'] * $scale);            
    $xpos = (int)(($width - $new_width) / 2);
    $ypos = (int)(($height - $new_height) / 2);

    $image_old = $this->image;
    $this->image = imagecreatetruecolor($width, $height);

    if (isset($this->info['mime']) && $this->info['mime'] == 'image/png') {     
        imagealphablending($this->image, false);
        imagesavealpha($this->image, true);
        $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127);
        imagecolortransparent($this->image, $background);
    } else {
        $background = imagecolorallocate($this->image, 255, 255, 255);
    }

    imagefilledrectangle($this->image, 0, 0, $width, $height, $background);

    imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width,     $new_height, $this->info['width'], $this->info['height']);
    imagedestroy($image_old);

    $this->info['width']  = $width;
    $this->info['height'] = $height;
}

何らかの理由で、@param に記載されている「デフォルト」にまったくアクセスできません!

助けてください Stackoverflow、あなただけが私の希望です

4

3 に答える 3

1

これは、次のスレッドによって解決されました。

OpenCart で画像のサイズ変更率を削除します

「max」要素を 1000 に設定し、CSS、つまり max-width 330px を介してオプションを含む要素を制御し、すべての画像が適切にサイズ変更されました。

于 2013-03-09T22:24:28.760 に答える
0

OpenCartはキャッシュを使用して、さまざまなサイズのすべての画像を保存します。そのためのスタイルシートは使用しないため、カスタムページでは、比率を維持する関数を使用して新しい画像を作成するだけです。

$new_image = $this->model_tool_image->resize($option_value['image'], 855, 255);

これらの関数が何をするかを理解するには、クラスModelToolImage(front >> tool)とImage(library)を見てください。

アップデート:

あなたのアップデートを見て、あなたはそれをすることができません。

'image' => $this->model_tool_image->resize($option_value['image'], $width == $auto, $height == $auto),

サイズを定義する必要があります。少し例を挙げてください。

$sizes = array(
    '1' => array('w' => 255, 'h' => 85),
    '2' => array('w' => 200, 'h' => 200),
    '3' => array('w' => 350, 'h' => 150),
)

$images = array();

foreach ($sizes as $key => $size)
{
    $images[$key] = $this->model_tool_image->resize($option_value['image'], $size['w'], $size['h']);
}

ここから、サイズ変更されたすべての画像が入力された配列($ images)があり、それを使用してテンプレート(.tpl)に入力できます。

于 2013-03-09T00:24:34.667 に答える
0

この問題の opencart マスター ブランチを追加しようとしましたが、受け入れられませんでした。この ( https://gist.github.com/hkulekci/4503178 ) パッチは、幅または高さに応じて画像を比率化します。

このパッチには、管理者設定、カタログのサイズ変更機能の更新、およびすべての画像のサイズ変更機能の更新があります。わからないことがあれば、何でも聞いてください。

編集 :

このパッチには 2 つの部分があります。最初は管理者で、2 番目はカタログです。管理部分を行う必要はありません。カタログ パーツのみを変更する必要があります。カタログ部分では、まず、次のようなファイルを変更する必要が/upload/catalog/model/tool/image.phpあります ( https://gist.github.com/hkulekci/4503178#file-my4-patch-L14)(https://gist.github.com/hkulekci/4503178 #file-my4-patch-L50)/upload/system/library/image.php

// '/upload/catalog/model/tool/image.php' file changes

// Find this line 
public function resize($filename, $width, $height) {

// Change it this
public function resize($filename, $width, $height, $type = "") {


// Find this
$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;

// Change this 
$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . $type .'.' . $extension;


// Find this 
$image->resize($width, $height);

// Change this 
$image->resize($width, $height, $type);


// '/upload/system/library/image.php' file changes

// Find this 
public function resize($width = 0, $height = 0) {

// Change this 
public function resize($width = 0, $height = 0, $type = "") {


// Find these lines 
$scale = min($scale_w, $scale_h);
if ($scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png') {

// CHange these lines 
$scale = 1;
if ($type == "w"){
    $scale = $scale_w;
}else if ($type == "h"){
    $scale = $scale_h;
}else{
    $scale = min($scale_w, $scale_h);
}
if ( $scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png' ) {
    return;
}

使用例: ( https://gist.github.com/hkulekci/4503178#file-my1-patch-L347 )

// At the end : 
// Comment for resize function 
/**
*
* @param width
* @param height
* @param type char [default, w, h]
* default = scale with white space,
* w = fill according to width,
* h = fill according to height
*
*/
$image = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_wishlist_width'), $this->config->get('config_image_wishlist_height'), "w");
于 2013-03-09T17:11:34.323 に答える