diff --git a/src/pages/CreateRollingPaperPage/components/ColorSwatch.jsx b/src/pages/CreateRollingPaperPage/components/ColorSwatch.jsx
index 9934ac8..23b5a7f 100644
--- a/src/pages/CreateRollingPaperPage/components/ColorSwatch.jsx
+++ b/src/pages/CreateRollingPaperPage/components/ColorSwatch.jsx
@@ -1,14 +1,14 @@
import styles from './ColorSwatch.module.scss';
import iconSelectedDark from '@/assets/icons/icon_success_darkgray_lg.svg';
import iconSelectedLight from '@/assets/icons/icon_success_gray_lg.svg';
-import { isColorDark } from '../../../utils/getIsColorDark';
+import { getIsColorDark } from '../../../utils/getIsColorDark';
const ColorSwatch = ({ hexColor, selectedColor, onColorSelect }) => {
return (
onColorSelect(hexColor)}>
{selectedColor === hexColor &&
- (isColorDark(hexColor) ? (
+ (getIsColorDark(hexColor) ? (

) : (

diff --git a/src/utils/getBackgroundStylesFromPostData.js b/src/utils/getBackgroundStylesFromPostData.js
new file mode 100644
index 0000000..44b0094
--- /dev/null
+++ b/src/utils/getBackgroundStylesFromPostData.js
@@ -0,0 +1,29 @@
+import { getColorFromCloudinaryImageUrl } from './getColorFromCloudinaryImageUrl';
+
+export const getBackgroundStylesFromPostData = ({ backgroundColor, backgroundImageURL }) => {
+ let backgroundStyle = {
+ backgroundColor: 'none',
+ backgroundImage: 'none',
+ backgroundRepeat: 'no-repeaet',
+ backgroundPosition: 'center',
+ backgroundSize: 'cover',
+ };
+
+ if (!backgroundImageURL) {
+ backgroundStyle.backgroundColor = `var(--color-${backgroundColor}-200)`;
+ } else {
+ const urlObj = new URL(backgroundImageURL);
+ const parts = urlObj.pathname.split('/'); // ['','dxho7f5dm','image','upload','v1749409044','colors','6a6a6a.png']
+ const folderCandidate = parts[5]; // public_id 시작 부분 (index 5)
+ if (folderCandidate === 'colors') {
+ const imageHexColor = getColorFromCloudinaryImageUrl(backgroundImageURL);
+ backgroundStyle.backgroundColor = imageHexColor;
+ } else if (folderCandidate === 'images') {
+ backgroundStyle.backgroundImage = `url(${backgroundImageURL})`;
+ } else {
+ backgroundStyle.backgroundImage = `url(${backgroundImageURL})`;
+ }
+ }
+
+ return backgroundStyle;
+};
diff --git a/src/utils/getColorFromCloudinaryImage.js b/src/utils/getColorFromCloudinaryImageUrl.js
similarity index 91%
rename from src/utils/getColorFromCloudinaryImage.js
rename to src/utils/getColorFromCloudinaryImageUrl.js
index 5144b2f..4add803 100644
--- a/src/utils/getColorFromCloudinaryImage.js
+++ b/src/utils/getColorFromCloudinaryImageUrl.js
@@ -1,6 +1,6 @@
//cloudinary 파일명에서 색상을 읽어옵니다.
//ex. ...colors/131313.svg는 #131313 입니다.
-export const getColorFromCloudinaryImage = (url) => {
+export const getColorFromCloudinaryImageUrl = (url) => {
if (!url) return null;
const urlObj = new URL(url);
const parts = urlObj.pathname.split('/'); // ['','dxho7f5dm','image','upload','v1749409044','colors','6a6a6a.png']
diff --git a/src/utils/getContentStylesFromPostData.js b/src/utils/getContentStylesFromPostData.js
new file mode 100644
index 0000000..8d4a590
--- /dev/null
+++ b/src/utils/getContentStylesFromPostData.js
@@ -0,0 +1,34 @@
+import { getColorFromCloudinaryImageUrl } from './getColorFromCloudinaryImageUrl';
+import { getIsColorDark } from './getIsColorDark';
+
+export const getContentStylesFromPostData = (backgroundImageURL) => {
+ const contentNormalColorStyle = {};
+
+ const contentDarkColorStyle = {
+ color: `var(--color-white)`,
+ };
+
+ const contentImageStyle = {
+ color: `var(--color-white)`,
+ background: `linear-gradient(180deg, rgba(0, 0, 0, 0.54) 0%, rgba(0, 0, 0, 0.54) 100%)`,
+ };
+
+ if (!backgroundImageURL) {
+ return contentNormalColorStyle;
+ } else {
+ const urlObj = new URL(backgroundImageURL);
+ const parts = urlObj.pathname.split('/'); // ['','dxho7f5dm','image','upload','v1749409044','colors','6a6a6a.png']
+ const folderCandidate = parts[5]; // public_id 시작 부분 (index 5)
+ if (folderCandidate === 'colors') {
+ const imageHexColor = getColorFromCloudinaryImageUrl(backgroundImageURL);
+ const isDark = getIsColorDark(imageHexColor);
+ if (isDark) {
+ return contentDarkColorStyle;
+ }
+ } else if (folderCandidate === 'images') {
+ return contentImageStyle;
+ } else {
+ return contentImageStyle;
+ }
+ }
+};
diff --git a/src/utils/getIsColorDark.js b/src/utils/getIsColorDark.js
index f6d71df..2d50cd8 100644
--- a/src/utils/getIsColorDark.js
+++ b/src/utils/getIsColorDark.js
@@ -1,4 +1,4 @@
-export const isColorDark = (hexColor) => {
+export const getIsColorDark = (hexColor) => {
const { r, g, b } = hexToRgb(hexColor);
const luminance = 0.299 * r + 0.587 * g + 0.114 * b;
return luminance <= 128;
diff --git a/src/utils/getIsImageOrColor.js b/src/utils/getIsImageOrColor.js
deleted file mode 100644
index f70ad73..0000000
--- a/src/utils/getIsImageOrColor.js
+++ /dev/null
@@ -1,16 +0,0 @@
-//이미지 Url을 읽어와 이미지 type인지, 컬러 type인지 검사합니다.
-//cloudinary 경로이고 colors 폴더에 저장된 사진이라면 'colors'
-//cloudinary 경로이고 images 폴더에 저장된 사진이라면 'images'
-//그 외 경로이면 'images',
-//null 이면 null을 반환합니다
-export const getIsImageOrColor = (url) => {
- if (!url) return null;
- const urlObj = new URL(url);
- const parts = urlObj.pathname.split('/'); // ['','dxho7f5dm','image','upload','v1749409044','colors','6a6a6a.png']
- const folderCandidate = parts[5]; // public_id 시작 부분 (index 5)
- if (folderCandidate === 'colors' || folderCandidate === 'images') {
- return folderCandidate;
- } else {
- return 'images'; // 기본값
- }
-};