-2

画像のサイズを 100x100、200x200 などに変更するが、アップロードされた画像の縦横比をそのまま維持する何らかの機能を探しています。

私の計画は、ある種のトリミングを使用することです。そのため、高さまたは幅が 100 に達した後、画像の中央でトリミングします。

だから私の論理はこのようなものです。

if ( $currentHeight > $currentWidth ) {
  //resize width to 100 and crop top and bottom off so it is 100 high
}

elseif ( $currentWidth > $currentHeight ) {
  //resize height to 100 and crop left and right off so it is 100 wide
}

私の考えでは、画像は100x100になり、奇妙に見えません!

きちんとした関数でこれを行う方法を知っている人はいますか??

4

3 に答える 3

1

clip : rectを使用して、純粋な css を使用して特定のサイズに合わせて画像をトリミングすることもできます。

<style>
/*Size of div that contains the dox*/
.crop{
    float:left;
    position:relative;
    width:100px;
    height:100px;
    margin:0 auto;
    border: 2px solid #474747;
}

.crop img{
    margin:0;
    position:absolute;
    top:-25px;
    left:-25px;
    /*       (Top,Right,Bottom,Left) */
    clip:rect(25px 125px 125px 25px);
}    
</style>

<div class="crop">
    <img src="http://static.php.net/www.php.net/images/php.gif" width="200" title="" alt="" />
<div>
<br/>

<div class="crop">
    <img src="http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=5" title="" alt="" />
<div>

See In Action

于 2012-05-07T01:53:39.773 に答える
0

中央部分をトリミングしたい場合は、座標をカウントするロジックは次のようになります。

1) 作物エリアの水平座標をカウントします。

$horizontal_center = $current_width/2;
$left = $horizontal_center - $new_width/2;
$right = $horizontal_center + $new_width/2;

2) トリミング領域の垂直座標をカウント:

$vertical_center = $current_height/2;
$top = $vertical_center - $new_height/2;
$bottom = $vertical_center + $new_height/2;
于 2012-05-07T00:58:06.037 に答える
0

これが私の答えです-これを行うためにimagemagick/php関数を書きました:

stackoverflow.com/questions/20927238/

于 2014-01-05T01:11:41.070 に答える