| ASPECT_RATIO_200 = { |
| '0.23': ([96, 416], 1), '0.40': ([128, 320], 1), '0.62': ([160, 256], 1), '0.86': ([192, 224], 1), |
| '1.17': ([224, 192], 1), '1.60': ([256, 160], 1), '2.25': ([288, 128], 1), '2.50': ([320, 128], 1), |
| '2.75': ([352, 128], 1), '4.00': ([384, 96], 1) |
| } |
|
|
| ASPECT_RATIO_256 = { |
| '0.25': ([128, 512], 1), '0.38': ([160, 416], 1), '0.55': ([192, 352], 1), '0.78': ([224, 288], 1), |
| '1.00': ([256, 256], 1), '1.29': ([288, 224], 1), '1.67': ([320, 192], 1), '1.83': ([352, 192], 1), |
| '2.40': ([384, 160], 1), '2.60': ([416, 160], 1), '2.80': ([448, 160], 1), '3.75': ([480, 128], 1), |
| '4.00': ([512, 128], 1) |
| } |
|
|
| ASPECT_RATIO_256_SQUARE = { |
| '1.00': ([256, 256], 1), |
| } |
|
|
| ASPECT_RATIO_320 = { |
| '0.26': ([160, 608], 1), '0.38': ([192, 512], 1), '0.50': ([224, 448], 1), '0.67': ([256, 384], 1), |
| '0.82': ([288, 352], 1), '1.00': ([320, 320], 1), '1.22': ([352, 288], 1), '1.50': ([384, 256], 1), |
| '1.86': ([416, 224], 1), '2.00': ([448, 224], 1), '2.50': ([480, 192], 1), '2.83': ([544, 192], 1), |
| '3.60': ([576, 160], 1), '3.80': ([608, 160], 1), '4.00': ([640, 160], 1) |
| } |
|
|
| ASPECT_RATIO_400 = { |
| '0.23': ([192, 832], 1), '0.32': ([224, 704], 1), '0.40': ([256, 640], 1), '0.53': ([288, 544], 1), |
| '0.62': ([320, 512], 1), '0.79': ([352, 448], 1), '0.92': ([384, 416], 1), '1.08': ([416, 384], 1), |
| '1.27': ([448, 352], 1), '1.50': ([480, 320], 1), '1.60': ([512, 320], 1), '1.89': ([544, 288], 1), |
| '2.00': ([576, 288], 1), '2.38': ([608, 256], 1), '2.50': ([640, 256], 1), '3.00': ([672, 224], 1), |
| '3.14': ([704, 224], 1), '3.43': ([768, 224], 1), '4.17': ([800, 192], 1) |
| } |
|
|
| ASPECT_RATIO_400_F64 = { |
| '0.23': ([192, 832], 1), '0.40': ([256, 640], 1), '0.62': ([320, 512], 1), '0.86': ([384, 448], 1), |
| '1.17': ([448, 384], 1), '1.60': ([512, 320], 1), '2.25': ([576, 256], 1), '2.50': ([640, 256], 1), |
| '2.75': ([704, 256], 1), '4.00': ([768, 192], 1) |
| } |
|
|
| ASPECT_RATIO_400_F64_SQUARE = { |
| '0.23': ([192, 832], 1), '0.40': ([256, 640], 1), '0.62': ([320, 512], 1), '0.86': ([384, 448], 1), '1.0': ([448, 448], 1), |
| '1.17': ([448, 384], 1), '1.60': ([512, 320], 1), '2.25': ([576, 256], 1), '2.50': ([640, 256], 1), |
| '2.75': ([704, 256], 1), '4.00': ([768, 192], 1) |
| } |
|
|
| ASPECT_RATIO_512x512 = { |
| '1.0': ([512, 512], 1), |
| } |
|
|
| ASPECT_RATIO_512 = { |
| '0.25': ([256, 1024], 1), '0.26': ([256, 992], 1), '0.27': ([256, 960], 1), '0.28': ([256, 928], 1), |
| '0.32': ([288, 896], 1), '0.33': ([288, 864], 1), '0.35': ([288, 832], 1), '0.4': ([320, 800], 1), |
| '0.42': ([320, 768], 1), '0.48': ([352, 736], 1), '0.5': ([352, 704], 1), '0.52': ([352, 672], 1), |
| '0.57': ([384, 672], 1), '0.6': ([384, 640], 1), '0.68': ([416, 608], 1), '0.72': ([416, 576], 1), |
| '0.78': ([448, 576], 1), '0.82': ([448, 544], 1), '0.88': ([480, 544], 1), '0.94': ([480, 512], 1), |
| '1.0': ([512, 512], 1), '1.07': ([512, 480], 1), '1.13': ([544, 480], 1), '1.21': ([544, 448], 1), |
| '1.29': ([576, 448], 1), '1.38': ([576, 416], 1), '1.46': ([608, 416], 1), '1.67': ([640, 384], 1), |
| '1.75': ([672, 384], 1), '2.0': ([704, 352], 1), '2.09': ([736, 352], 1), '2.4': ([768, 320], 1), |
| '2.5': ([800, 320], 1), '2.89': ([832, 288], 1), '3.0': ([864, 288], 1), '3.11': ([896, 288], 1), |
| '3.62': ([928, 256], 1), '3.75': ([960, 256], 1), '3.88': ([992, 256], 1), '4.0': ([1024, 256], 1), |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| ASPECT_RATIO_627 = { |
| '0.26': ([320, 1216], 1), '0.31': ([352, 1120], 1), '0.38': ([384, 1024], 1), '0.43': ([416, 960], 1), |
| '0.52': ([448, 864], 1), '0.58': ([480, 832], 1), '0.67': ([512, 768], 1), '0.74': ([544, 736], 1), |
| '0.86': ([576, 672], 1), '0.95': ([608, 640], 1), '1.05': ([640, 608], 1), '1.17': ([672, 576], 1), |
| '1.29': ([704, 544], 1), '1.35': ([736, 544], 1), '1.50': ([768, 512], 1), '1.67': ([800, 480], 1), |
| '1.73': ([832, 480], 1), '2.00': ([896, 448], 1), '2.31': ([960, 416], 1), '2.58': ([992, 384], 1), |
| '2.75': ([1056, 384], 1), '3.09': ([1088, 352], 1), '3.70': ([1184, 320], 1), '3.80': ([1216, 320], 1), |
| '3.90': ([1248, 320], 1), '4.00': ([1280, 320], 1) |
| } |
|
|
|
|
| ASPECT_RATIO_627_F64 = { |
| '0.26': ([320, 1216], 1), '0.38': ([384, 1024], 1), '0.50': ([448, 896], 1), '0.67': ([512, 768], 1), |
| '0.82': ([576, 704], 1), '1.00': ([640, 640], 1), '1.22': ([704, 576], 1), '1.50': ([768, 512], 1), |
| '1.86': ([832, 448], 1), '2.00': ([896, 448], 1), '2.50': ([960, 384], 1), '2.83': ([1088, 384], 1), |
| '3.60': ([1152, 320], 1), '3.80': ([1216, 320], 1), '4.00': ([1280, 320], 1)} |
|
|
| ASPECT_RATIO_960 = { |
| '0.25': ([480, 1920], 1), '0.29': ([512, 1792], 1), '0.32': ([544, 1696], 1), '0.36': ([576, 1600], 1), |
| '0.40': ([608, 1504], 1), '0.49': ([672, 1376], 1), '0.54': ([704, 1312], 1), '0.59': ([736, 1248], 1), |
| '0.69': ([800, 1152], 1), '0.74': ([832, 1120], 1), '0.82': ([864, 1056], 1), '0.88': ([896, 1024], 1), |
| '0.94': ([928, 992], 1), '1.00': ([960, 960], 1), '1.07': ([992, 928], 1), '1.14': ([1024, 896], 1), |
| '1.22': ([1056, 864], 1), '1.31': ([1088, 832], 1), '1.35': ([1120, 832], 1), '1.44': ([1152, 800], 1), |
| '1.70': ([1248, 736], 1), '2.00': ([1344, 672], 1), '2.05': ([1376, 672], 1), '2.47': ([1504, 608], 1), |
| '2.53': ([1536, 608], 1), '2.83': ([1632, 576], 1), '3.06': ([1664, 544], 1), '3.12': ([1696, 544], 1), |
| '3.62': ([1856, 512], 1), '3.93': ([1888, 480], 1), '4.00': ([1920, 480], 1) |
| } |
|
|
| ASPECT_RATIO_960_F64 = { |
| '0.22': ([448, 2048], 1), '0.29': ([512, 1792], 1), '0.36': ([576, 1600], 1), '0.45': ([640, 1408], 1), |
| '0.55': ([704, 1280], 1), '0.63': ([768, 1216], 1), '0.76': ([832, 1088], 1), '0.88': ([896, 1024], 1), |
| '1.00': ([960, 960], 1), '1.14': ([1024, 896], 1), '1.31': ([1088, 832], 1), '1.50': ([1152, 768], 1), |
| '1.58': ([1216, 768], 1), '1.82': ([1280, 704], 1), '1.91': ([1344, 704], 1), '2.20': ([1408, 640], 1), |
| '2.30': ([1472, 640], 1), '2.67': ([1536, 576], 1), '2.89': ([1664, 576], 1), '3.62': ([1856, 512], 1), |
| '3.75': ([1920, 512], 1)} |
|
|
|
|
| ASPECT_RATIO_1440_F64 = { |
| '0.24': ([704, 2944], 1), '0.29': ([768, 2688], 1), '0.33': ([832, 2496], 1), '0.39': ([896, 2304], 1), |
| '0.44': ([960, 2176], 1), '0.50': ([1024, 2048], 1), '0.57': ([1088, 1920], 1), '0.70': ([1216, 1728], 1), |
| '0.80': ([1280, 1600], 1), '0.88': ([1344, 1536], 1), '0.96': ([1408, 1472], 1), '1.05': ([1472, 1408], 1), |
| '1.14': ([1536, 1344], 1), '1.25': ([1600, 1280], 1), '1.37': ([1664, 1216], 1), '1.42': ([1728, 1216], 1), |
| '1.71': ([1856, 1088], 1), '1.76': ([1920, 1088], 1), '2.00': ([2048, 1024], 1), '2.50': ([2240, 896], 1), |
| '2.92': ([2432, 832], 1), '3.00': ([2496, 832], 1), '3.08': ([2560, 832], 1), '3.58': ([2752, 768], 1), |
| '3.67': ([2816, 768], 1), '4.09': ([2880, 704], 1) |
| } |
|
|
| |
| def find_hw(target_area, target_ratio, factor=32): |
|
|
| min_side = factor |
| max_side = target_area // factor // factor * factor + factor |
| min_error = float('inf') |
| best_solution = None |
| |
| for height in range(max_side, min_side-1, -factor): |
| width = round(target_area / height / factor) * factor |
| if width < min_side: |
| continue |
| |
| ratio = height / width |
| |
| ratio_error = abs(ratio - target_ratio) |
| |
| if ratio_error < min_error: |
| min_error = ratio_error |
| best_solution = (height, width) |
| |
| if ratio_error == 0: |
| break |
| |
| return best_solution |
|
|
| if __name__ == "__main__": |
| ratios = list(map(float, ASPECT_RATIO_512.keys())) |
| res = {} |
| for ratio in ratios: |
| h,w = find_hw(400**2, ratio, 64) |
| res[f"{h/w:.2f}"] = ([h,w], 1) |
| print((h*w)**0.5) |
|
|
| print(res) |
|
|
|
|
|
|