Обрезайте изображения снизу и сверху одинаково с помощью ColdFusion 10

Я пытался программно изменить размер и обрезать изображения с помощью ColdFusion 10. Что сводит меня с ума, так это то, что я не могу одинаково обрезать изображения снизу и сверху, сохраняя при этом одинаковую ширину.

Вот что у меня сейчас есть, всего несколько простых строк:

    <cfimage source="images/test/airateapple.png" name="myImage" overwrite="yes">

    <cfif ImageGetWidth(myImage) gte 1024>
        <cfset ImageSetAntialiasing(myImage,"on")>
        <cfset ImageScaleToFit(myImage,800,"","mediumquality")>
        <cfif ImageGetHeight(myImage) gt 350> 
            <cfset sizeToCrop= ImageGetHeight(myImage) - 350>
            <cfset ImageCrop(myImage,0, sizeToCrop
                               , ImageGetWidth(myImage)
                               , ImageGetHeight(myImage) )>
        </cfif>

        <cfset finalImage=myImage>
    </cfif>

    <!--- Display the modified image in a browser. --->
    <cfimage source="#finalImage#" action="writeToBrowser">

Например, если высота изображения составляет 500 пикселей после изменения размера, оно должно обрезаться дополнительно на 150 пикселей. Точнее, обрежьте 75 пикселей снизу и 75 пикселей сверху. Является ли это возможным?


person user2595617    schedule 14.09.2013    source источник
comment
К вашему сведению: я удалил лишние знаки # в коде. Единственное место, где они вам нужны, это <cfimage source="#finalImage#" ...> (поскольку переменная заключена в кавычки).   -  person Leigh    schedule 15.09.2013


Ответы (1)


<cfset sizeToCrop= ImageGetHeight(myImage) - 350>
<cfset ImageCrop(myImage, 0 
                     , #sizeToCrop# 
                     , #ImageGetWidth(myImage)#
                     , #ImageGetHeight(myImage)#
                   )>

Если вы выведете параметры, вы увидите, что ваши значения y и height отключены. Скажем, размеры исходного изображения 500px x 500px. Прямо сейчас вы начинаете обрезку слишком низко (например, y=150px) и используете исходную высоту вместо желаемой высоты (например, 350px).

       // current code (wrong)
       ImageCrop(myImage, 0 , 150 , 500 , 500 )

Чтобы захватить центр изображения, вам нужно начать обрезку с y=75 (т.е. избыточной высоты / 2). Затем используйте желаемую высоту (например, 350px), а не исходную:

       // ImageCrop( img, x, y, width, height )
       yPosition  = (originalHeight - desiredHeight) / 2;
       ImageCrop(myImage, 0, yPosition, originalWidth, desiredHeight );
person Leigh    schedule 14.09.2013
comment
Я знал, что что-то не так с вычислениями, хотя математика на сердце никогда не была моей вещью :) спасибо, это работает как шарм! - person user2595617; 15.09.2013