2013-01-23 3 views
0

중첩 된 if 문으로이 작업을 수행 할 수 있다는 것을 알고 있습니다. 그러나 더 우아한 방법이있는 것처럼 느낄 수는 없습니다. 내가 생각하기에 그것은 정말로 수학 문제 일뿐입니다. 실제로 존재한다면 파이썬적인 답변에 관심이 있습니다.주어진 최소 치수로 이미지의 크기를 조정하십시오 (x 또는 y)

나는 모든 치수/종횡비 일 수있는 이미지가 있습니다.

는 55w의 X 168H의 minumum을 덮도록이 최대 또는 축소해야

여기 합병증 그것의 길이를 지정하는 단 하나의 값을 취하는 함수로 확장 할 필요가 있다는 것이다 이미지가 내부에 들어갈 수있는 정사각형의 측면.

예를 들어 이미지의 크기가 1000w x 500h이고 크기를 200으로 설정 한 경우 결과 이미지는 정사각형 안에 200면이 있어야 결과 이미지가 200w x 100h가됩니다.

반대로 이미지 크기가 200x1000이고 크기를 200으로 설정하면 40x200으로 끝납니다.

그래서 55x168을 포함하도록 1000x500 크기의 이미지를 확대하려면 336x168의 크기를 제공해야합니다. 336x168의 크기는 336x336 크기의 정사각형 안에 들어갈 수있는 가장 큰 이미지이므로 크기를 조정해야합니다.

이미지 크기를 200x1000으로 조정하여 55x168 크기로 조정하려면 이미지 크기를 275로 조정하고 55x275로 조정해야합니다.

이 부분이 진흙보다 선명하기를 바랍니다. 어떤 아이디어 주셔서 감사합니다.

칭의 : 왜 내가 사각형면의 값을 통해 크기를 조정하는지 관심이있는 사용자에게 Picasa가 URL 삽입을 통해 이미지의 크기를 조정하는 방식입니다. 예를 들어 다음 두 URL을 가지고 : 모두

주의 사항은 URL 구성 요소 s150을 가지고, 그러나 하나 개의 이미지가 150x112이고 다른 하나는 112x150입니다. 150은이 이미지들이 모두 들어갈 정사각형의 값입니다.

답변

1
def name_of_function(img_x, img_y): # for lack of a better name 
    image_dimensions = (img_x, img_y) 
    min_dimensions = (55.0, 168.0) 
    scale = min(image_dimensions[i]/min_dimensions[i] for i in range(2)) 
    return max(i/scale for i in image_dimensions) 

name_of_function(1000, 500) 
# 336.0 
name_of_function(200, 1000) 
# 275.0 

틀림없이 이것이 당신이 찾고있는 것입니다.

+0

훌륭합니다, 감사합니다! – DanH

1

세부 사항에 관해 더 자세히 말할 필요가 있다고 생각하지만 기능에 이미지 나 치수에 대한 액세스 권한이 있다고 가정합니다. 계산이 불가능합니다. 당신은 가능성이 호출의 일부의 서명을 조회해야합니다

def percent_to_scale_to(image, box_side_px): 
    img_width, img_height = Image(image).size() # or however you get w/h 
    greater_img_dimension = max(img_width, img_height) 
    scale_percent = (float(box_side_px)/float(greater_img_dimension)) * 100.0 

, 그리고 그냥 작업을 기대하지 않는다 :

하지만 손에, 이런 걸 해야지 작동하는 잘라 내기 및 붙여 넣기를 사용하지만 의사 코드로 사용하면 어프로치에 대한 아이디어를 얻을 수 있습니다. :)

예기치 않은 동작을 일으킬 수있는 정수 나누기가 필요합니다. 그것이 분할 전의 부동화 이유입니다. 그렇지 않으면 결과는 대부분 0의 리턴 값을 생성 할 수있는 소수점에서 잘립니다. 아직 친숙하지 않다면 Python의 부서 행동에 대한 빠른 연구가 가치가있을 것입니다.

+0

죄송 합니다만 입력 사항에 대해 설명해 주셨으면합니다. 그러나 다른 답변이 나와 있습니다. – DanH